第七章 继承
继承:可以得到基类中的所有可以被子类访问的成员。强调可以被访问的成员,是因为基类的private成员不可得到,对于不同包中基类的friendly成员也是不可得的
1.组合描述的是“有一个的关系”,比如汽车类和车轮类,汽车含有车轮;继承描述“是一个”的关系,水果类和香蕉类,香蕉是一种水果
2.如果基类没有默认构造器或者想要调用基类待参数构造器,必须在子类构造函数第一句代码中使用super显示调用基类构造器。
class F { F(int i) { System.out.println("This is Class F"); } } public class Super extends F{ Super() { super(1); } public static void main(String[] args) { // TODO Auto-generated method stub new Super(); } }
3.重载和覆盖的区别
函数名和参数列表唯一的标识了一个函数即为函数的特征签名
重载:方法名字相同,但参数列表不同(包括参数声明的顺序),重载没有方法可见性要求。(返回值不可以作为重载的判断依据)
覆盖:方法名字,参数列表,以及返回值相同,覆盖不可以降低方法的可见性。(协变返回类型,返回值可以是被覆盖方法,返回类型的子类)
4.宽转型、窄转型,向上转型和向下转型
宽转型和窄转型是针对基本数据类型而言的,窄转型是不安全的要进行强制类型转换
向上转型和向下转型针对对象而言,向上转型是安全的,向下转型不安全,向上转型可以保证使用基类发送的所有消息(即方法调用),子类都可正确接收
5.final关键字总结
(1)final修饰数据,表示常量,必须在定义处或者构造器中进行初始化
(2) final修饰方法,第一种表示内联函数(现在已经过时,现在把关于性能的问题都交给编译器和虚拟机了)
第二种表示:此方法禁止被覆盖,入过个覆盖会报错。
(3)final修饰类,表示此类不可被继承