Java基础

什么是面向对象? 1 面向过程思想 答:线性过程 第一步做什么 第二步做什么 2 面向对象思想 答:物以类聚有,分类的思维模式,思考问题首先解决问题需要哪些分

什么是面向对象?

1.面向过程思想

答:线性过程 第一步做什么 第二步做什么

2.面向对象思想

答:物以类聚有,分类的思维模式,思考问题首先解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行全面过程的思索

 

面向对象编程(oop)

面向对象编程的本质就是:以类的方式组织代码,以对象的组织数据

三大特性

1.封装

2.继承

3.多态

 

类和对象的关系

类:类是一种抽象的数据类型,它是对某一类事务的整体描述/定义,但并不能代表某一个具体的事物,比如:手机,动物,植物 等等.....

对象:对象是抽象概念的具体实例,例如:狗就是属于动物类中的一个具体实例

 

创建与初始化对象

使用new关键字创建对象

先有对象才有类 先定义一个总的类 例如 人类 在人类中可以分为name与age 然后再到对象中取实现这个,因为有很多人每个人不同名字不同年龄 所有不能在类中写死 于是有了对象 对象可以定义不同的类 例如在对象中:xiaoming 20  xiaohong 19;

类:这里定义了name 与age 但是要在对象中给他们赋值

 

 对象:对象在方法中实现 这个分别给name与age赋了 xiaoming 与 xiaohong 以及给他们分别赋了 20与19并且在方法中输出了赋予值的属性

 

 

构造器详解

什么是构造器?

构造器也叫构造方法作用是构造一个类的实例,确保对象能够初始化

根据有无参数,构造器可分为无参构造和有参构造

构造器最大的用处就是在创建对象时执行初始化,当创建一个对象时,系统会为这个对象实例进行默认的初始化

构造器的特性

1.与一般方法名不同的是,构造方法名必须和类名保持一致,并且没有返回值,甚至连void都没有。

2.Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值

3.倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错。

4.当类实例化一个对象时会自动调用构造方法。

5.不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承

6.每个类可以有零个或多个构造方法.

 

简单小结类与对象

1.类与对象

  类是一个模块,抽象的。对象是一个具体的实例

2.方法

  定义,调用

3.对象的引用

  引用类型:基本类型(8)

  对象是通过引用来操作的:栈-》堆

4.属性:字段Field 成员变量

  默认初始化:

    数字:0    0.00

    char: u0000

    boolean:false

    引用:null

  修饰符 属性类型 属性名 = 属性值

5.对象的创建与使用

  -必须要new创建对象,构造器  Person kuangsheng = new Person();

  -对象的属性 kuangshen.name

  -对象的方法 kuangshen.sleep()

6.类:

  静态的属性  属性

  动态的行为  方法

 

封装

高类聚,低耦合

封装是将对象封起来 如何封起来呢 就要用到private  private:私有的

在创建对象时要使用private  例如:private String name; 这里将name给私有化了

私有化之后在类中就获取不到呢怎么办呢,这时就要在对象下面加上get和set方法

get:获取这个数据 例如sout(student.getName),这样就能输出name的值了

虽然能获取数据 但是怎样给数据赋值呢。这时就要用到set方法

set:给这个数据设置值 例如 student.setname("李旺") 这样就能给通过set方法给name进行赋值

小结:封装就是把属性私有化了,让外部不能随意更改值和获取值 只能通过get和set方法获取 

 

 

继承

继承顾名思义,可以理解为儿继承父亲 儿子可以继承父亲里面所有东西

如何来继承呢? 继承需要用到一个单词就是"extends" 单词后面加上继承的父类名字

例如:LiWang extends WangMy 这个意思就是李旺类继承了王明阳类

继承的作用继承中子类可以用到夫类的使用东西 对象,方法等等

但是前提是父类中需要使用public公共的 但是private私有的也没关系通过getset请求就好了

 

super关键字

1.super调用父类的构造方法,必须在构造方法第一个

2.super必须只能出现在子类的方法或者构造方法中

3.super和this 不能同时调用构造方法

super 和 this 区别

1.代表对象不同 this:代表调用者这个对象 super:代表父类对象的应用

2.前提 this:没有继承也能使用 super:只能在继承调条件下才能使用

3.构造方法区别 this:this()本类的构造  super();父类的构造

 

 

重写

假设子类继承了父类所有的属性 但是子类要写个方法和父类名字一样的方法 这时就用到了重写@Override 这样既不改变方法名又可以使用到子类中与父类名字一样的方法

需要继承关系,子类重写父类的方法!

 

 

1.方法名必须相同

2.参数列表必须相同

3.修饰符:范围可以扩大但是不能缩小

4.抛出的异常:范围可以被缩小,但不能扩大

重写子类的方法和父类必须一致:方法体不同!

为什么需要重写:

  1.父类的功能子类不一定需要,或者不一定满足

 

多态

多态前提条件:必须有父子关系

多态的定义格式 :父类类型 变量名 =new 子类类型();

在使用多态后的父类引用变量调用方法时,会调用子类重写的方法

 

多态的注意事项

1.多态是方法的多态,属性没有多态

2.父类和子类,有联系 类型转换异常

3.存在条件:继承关系,方法需要重写,父类引用指向子类对象

 

关键字 instanceof

 instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false

 

 

 

 

 

 注意看 标红的object不是Person的上级那个Object 这个object对象是属于Student类中的 

Objecct >  Person >Student

所以 student中的 object是属于 Student,Person,Object中的,所以为True

为什么到与Teacher比较为Flast呢 因为Student与Teacher同一个级别 Teacher不属于Student的上级 

当Student的下级进行比较 结果也为Fales 

 

类型转换

当一个父类想调用子类方法 是不能直接进行调用的 得强制转换 被称为高转低

高转低后才能用到子类中的方法

子类想要父类直接调用

 

 

抽象类

1.不能new这个抽象类 只能子类去实现他:约束!

2.抽象类中可以写普通方法

3.抽象方法必须在抽象类中

 

接口定义与实现

接口定义需要用到关键字 interface  在接口类里面写方法 也只能写方法 不能写实现方法过程

 

 实现类 实现类实现接口类中的接口 在里面写方法 

实现类用到一个关键字 implements 后面接上接口类名字 然后会自动让你重写方法里面的方法体

一个实现类可以实现多个接口