继承(inherit)

继承是面向对象编程的三大特征之一

继承让我们更加容易实现类的扩展,实现代码的重用,不必再重新发明轮子(don’t reinvent wheels)

继承有两个主要作用

1、代码复用,更加容易实现类的扩展

2、方便建模

从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在

instanceof运算符

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

继承使用要点

1、父类也成为超类、基类、子类、派生类等

2、Java中只有单继承,没有像C++那样的多继承,多继承会引起混乱,使得继承链过于复杂,系统难以维护

3、Java中类没有多继承,接口有多继承

4、子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以直接访问,比如父类私有的属性和方法

5、如果定义一个类时,没有调用extends,则他的父类是:java.lang.Object

组合

除了继承,“组合”也能实现代码的复用!“组合”核心是“将父类对象作为子类的属性”

组合比较灵活,继承只能有一个父类,但是组合可以有多个属性,所以,有人声称“组合优于继承,开发中可以不继承”,但是,不建议走极端

对于“is-a”关系建议使用继承,“has-a”关系建议使用组合

Object类详解

所有的类都是Object类的子类,也都具备Object类的所有特性

Object类基本特性

1、Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法

2、如果在类的声明中未使用extends,则默认继承Object类

toString方法

Object类中定义有public String toString()方法,其返回值是String类型。Object类中的toString方法的源码为:

1
2
3
4
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

equals方法的重写

==和equals方法

1、“==”代表比较双方是否相同,如果是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个对象

2、equals()提供定义”对象内容相等”的逻辑

3、equals()默认是比较两个对象的”hashcode”,但可以根据自己的要求重写equals方法

super关键字

1、super可以看作是直接谷类对象的引用,可通过super来访问父类中被子类覆盖的方法或属性

2、使用super调用普通方法,语句没有位置限制,可以在子类中随便第哦啊用

3、在一个类zhong,若是构造方法的第一行没有调用super(…)或者this(…);那么java默认都会调用super(),含义是调用父类的无参数构造方法

继承树的追溯

构造方法的调用顺序:

构造方法第一句总是:super(…)来调用父类对应的构造方法,所以,流程就是:先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止

注意:静态初始化块调用顺序,与构造方法调用顺序一样!

属性/方法查找顺序:(比如:查找A)

1、查找当前类中有没有属性A

2、依次上溯每个父类,查看,每个父类中是否有A,知道Object

3、如果没找到,则出现编译错误

4、上面步骤,只要找到A变量,则这个过程终止


This site is built by Kairos using the Stellar 1.33.1 theme.
Unless otherwise stated, all articles on this blog are licensed under CC BY-NC-SA 4.0. Please indicate the source when reprinting.