补充
生成1个
Java继承
- 是“is-a"关系
- 仅支持单一继承,因此整个java类的继承关系是一个从最大的超类开始的多路树
- 继承后的子类,拥有父类的全部属性和方法(包括构造、析构等等)
- 但是,子类也可以进行对父类的属性和方法进行修改
这里称为重写
重写
- 需要注意的是,重写时,方法名,参数特征,均相同。
super()
当重写发生时,若还想使用父类的方法,则使用super()
例子
使用的方法
创建一个对象时,会发生什么
例子
需要注意的例子
- 注意,系统默认执行的是没有参数的父类构造函数。
如果父类没有留出一个无参数的父类构造函数,但依旧按系统默认调用,会出现如下错误。
- 解决办法:
- 将子类构造函数中的super()中加上对应的参数
- 在父类中增加无参数的构造函数
- 最后一点,不是第一行会报错。
final的其他用法
一个关键的点
- 注意,Java中所有方法均在类中!!
- 在子类中√,子类实例p√ 可以访问从继承而来的父类方法,s.setName()√
- 在子类中,子类实例的属性(可能是一个基类实例)不能访问
重写Object方法
- 我们diy或者使用的任何类,都是Object的子类
- 我们可以重写Object中的方法
重写打印对象的方法
打印一个对象时,自动调用toString方法,我们可以重写该方法,打印我们想要的信息。
public String toString()
多态
向上转型
- p1有的方法s1没有
- s1有的方法p1不一定有,所以s1不能被p1赋值,因为s1中有些方法没有对应的东西。
接口窄化
if(p1 instanceof student)//如果p1是student的一个实例
注意事项
- 但此时也必须使用强制类型转换来实现
- 注意,均是引用
安全的向下转型
动态绑定
- 注意!!!static方法不会被重写,但一样会被继承(如果不是privated的话)