复用类有两种方式,组合和继承。
子类构造器被调用之前java会自动调用父类构造器(可以不显示出现在子类构造器代码中)。(当父类存在默认构造器时)。
如果父类只有一个带参数的构造器,那么子类构造器代码中则需要显示的调用父类构造器。
当你想要覆写某个父类的方法时,可以添加@override注解。
is-a的关系使用继承来表达,has-a的关系使用组合来表达。
子类引用转换为父类引用,被称作向上转型。
7.8 final关键字的使用(数据,方法和类)
7.8.1 final 数据
向编译器告知一块数据是恒定不变的。
1.一个永不改变的编译时常量。(编译时常量可以在编译时期执行计算式,从而减轻运行时的负担。在java中,这类常量必须是基本数据类型,并且以final表示。)
2.一个在运行时被初始化的值,而你不希望它被改变。
一个既是static又是final的域只占据一段不能改变的存储空间。
当final修饰一个对象引用而非基本数据类型时,这表示该引用不能再指向其他的对象。
7.8.2 final方法
将方法锁定,防止任何继承类修改它。
7.8.3 final 类
将类定义为final,表示你不打算继承该类,而且也不允许别人这样做。
7.9 初始化与类的加载
类的代码在初次使用时才被加载,这通常是指加载发生于创建类的第一个对象之时,但当访问static域或static方法时,也会发生加载。(构造器也是static方法,因此更准确的讲,类是在任何static成员被访问时加载的)。
子类对象创建过程:
1.加载子类,发现子类继承父类,进而加载父类,执行父类的静态初始化动作。
2.执行子类的静态初始化动作。
3.子类分配对象空间并清零。然后调用父类构造器(调用父类构造器之前会先执行父类成员定义处的初始化动作)。
4.执行子类成员定义处的初始化动作。
5.执行子类构造器。