HeadFirst
继承
Has-A Is-A
A has a B. 说明B是A的实例
X is a Y.隐喻着 X可以做出任何Y可以做的事情(且还可能有更多的行为)。也就是说,在语言中,X是Y的孩子
IS A 是单箭头而不是双箭头
子类可以继承父类的成员
父亲可以通过存取权限确定子类是否能够继承某些特定的成员。
public 类型的成员会被继承
private类型的成员不会被继承
final 这个修饰符,这表示他是继承树的末端,不能被继承。
存取控制,就算类不能被标识为私有,但它还是可以不标记共有。非公有的类自能被同一个包的类做出的子类。
继承注意事项
定出共同协议
一旦父类修改了方法的参数数目、类型活返回类型,子类会受到影响。
当定义出一组类的父类时,可以用子类的任何类来填补任何需要或期待父型的位置。
覆盖规则
方法就是合约的标志。
参数必须要一样,且返回类型必须要兼容(生命返回一样类型,或者该类型的子类)。
不能降低方法的存取权限。
方法的重载不是用来满足定义在父类的多态合约,所以重载的方法比较有扩展性。重载的方法只是刚好有i型昂同名字的不同方法,它与继承或多态无关。
抽象类
除了被继承过之外,是没有用途,没有值,没有目的的。
如果生命出一个抽象的方法,酒必须将类也标记为抽象的。不能再非抽象类中拥有抽象的方法。
抽象方法的意义:无法实现出方法内容,但还是可以定义出一组子类共同的协议。
好处:多态。
Object
多态
在多态下,引用与对象可以是不同的类型。
运用多态时,引用类型可以是实际对象类型的父类。
不能确定类型时候可以用
if(o instanceof Dog){
Dog d =(Dog) o;
}
Java非常注意引用变量的类型:
1.只能在引用变量的类确实有该方法才能调用它。
2.吧类的公有方法当做是合约的内容,合约时你对其他程序的承诺协议。