继承
-
子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法。
-
继承下来的方法可以被覆盖掉,但实例变量不能被覆盖掉
-
可以用IS-A测试来验证继承机构的合理性,IS-A- 关系是单方向的,河马是动物,但动物不一定是河马
-
当某个方法在子类中被覆盖了,调用这个方法会调用到被覆盖的方法
-
父类类型的引用 可以调用父类中定义的所有属性和方法,对于子类中定义的而父类中没有的,父类类型的引用不能调用!
(!!!编译器是通过引用变量的类型来决定那些属性和方法可以被调用,而不是根据引用的对象本身的类型!!!) -
使用
super
关键字引用父类对象,即可以调用父类方法。 -
参数和返回类型也可以多态
同名异式
- 遵守合约:覆盖的规则
当你要覆盖父类的方法时,就得同意履约。方法就是合约的规则:- 参数必须一样,并且返回类型必须兼容
- 不能降低方法的存取权限
- 方法的重载(overload)
重载的意义是两个方法名称相同,但参数不同,所以和重载和多态毫无关系。
- 必须使用不同的参数
- 返回的类型可以不同
- 可以任意更改存取权限
接口与抽象类
继承只是个开始,要使用多态我们还需要接口。接口是一种100%纯抽象的类。
抽象类:是无法被初始化为对象的类,设计抽象类只需要在类的声明前加上abstract