一、面向对象三大特性(继承,封装,多态):
1.继承:
继承是类与类之间的关系,如‘教师’继承‘人’,其中‘人’就是基类(父类)而‘教师’就是派生类(子类)
java中只允许单继承,即一个类最多只能继承一个,一个类可以被多个类继承,但不能一个类继承多个类。如A继承B,B继承C,但A不可以同时继承B和C
子类可以继承父类中除private关键字修饰的方法。
子类中如果不满足于父类中的方法,那么可以进行方法的重写(override),并且子类也可以拥有独属于自己的方法
继承的类初始化关系:
1.父类静态属性
2.父类静态块
3.子类的静态属性
4.子类的静态块块
5.父类的普通属性
6.父类的普通块
7.父类的构造方法
8.子类的普通属性
9.子类普通块
10.子类的构造方法
普通类初始化关系:
1.加载静态属性
2.静态块
3.普通属性
4.普通块
5.构造方法
super关键字可以代表父类对象
1.访问父类的属性:super.age
2.访问父类的方法:super.eat()
若子类构造方法中没用调用父类的构造方法则默认调用父类无参构造方法
若子类构造方法中没有调用父类的构造方法而且父类中没有无参构造方法则会报错
Object类是所有类的根类,所有类都继承Object类都可以用其方法如String类就重写了equals方法
2.多态:
继承是多态的基础
a.引用多态:
父类引用指向本类对象
Person p = new Person();
父类引用指向子类对象
Person p = new Teacher();
注意:
若要使用子类中独有的方法则不能使用这个方式
子类引用不能指向父类对象
b.方法多态:
方法重写(overrider):在不同类
子类方法重写父类方法,除了修饰符不同外其他必须相同,但是方法内容可以不同
方法重载(overload):在同一个类中
同一个类中,可以有多个相同名字的方法但是参数列表必须不同,返回值类型可以不同
c.类型转换:
向上类型转换(隐式类型转换,是小类型转换大类型)
Teacher t = new Teacher();
Person p = t;
父类引用指向子类对象
向下类型转换(强制类型转换,是大类型转换到小类型)
Teacher t = new Teacher();
Person p = t;
Teacher t1 = (Teacher)p;
将父类对象转换为子类引用编译器不允许这样做,所以得强制类型转换,有可能会出现数据丢失
instanceof运算符
Person p1 = new Person();
Person p2 = new Man();
Man m1 = new Man();
System.out.println(p1 instanceof Man);//false
System.out.println(p2 instanceof Man);//true
System.out.println(m1 instanceof Man);//true
是一个二目运算符用来判断左边是否为右边对象的实例
常与if连用来判断两个对象的类型是否一致
d.抽象类:
抽象类和抽象方法都要使用abstract关键字进行修饰
抽象方法:没有方法体的方法就是抽象方法
抽象类:包含抽象方法的类为抽象类,抽象类中可以有普通方法,普通类中必须只能包含有普通方法
public abstract class Animal {
abstract public void chi();public void eat(){
System.out.println("吃东西");
}
}
应用场景:
1.父类中某些方法必须要求子类重写那么父类可以写成抽象类方法变成抽象方法
2.从多个具有相同特征的类中抽出一个抽象类,这个抽象类将作为子类的模板,从而避免子类设计的随意性。
抽象类不能直接创建,可以定义引用变量来指向子类对象,来实现抽象方法。
e.接口:
是比抽象类更抽象的类,用interface关键字修饰,全都是抽象方法,不能包含普通方法
应用场景:
父类中全部方法要求子类必须对其进行重写,此时,父类的全部变为抽象方法,父类也可以声明为接口
在java中只能单继承但是可以实现多个接口,不能含有静态代码块以及静态方法
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;且必须给其初值,所以实现类中不能重新定义,也不能改变其值
3.封装:
一些信息只允许自己类使用而不允许别的类使用或在一定的范围进行使用
数据封装:属性私有化[修饰符-限制元素的访问范围]
访问范围修饰符:public、protected、默认、private
访问范围修饰符 | 本类 | 同包 | 子类 | 其他 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
私有属性的访问使用get/set方法