第五章 继承
5.1 反射:在程序运行期间发现更多的类及其属性的能力
C++注释:Java用关键字extend代替了C++的(:)。在Java中所有的继承都是公有继承,而没有C++中的私有继承和保护继承
5.1.2已存在的类称为超类、基类或者父类
5.1.3新类称为子类、派生类、或者孩子类
5.2子类并不能直接访问超类的私有域,尽管拥有父类的方法,但是若想访问私有部分必须借助于公有的接口,而父类的接口调用则需要用到super这条语句
5.3 覆盖方法
子类可以增加域,增加方法或者覆盖超类的方法,但是绝对不能删除继承的任何域或者方法
子类构造器用super调用父类的构造器,对这部分私有域进行初始化。
super调用构造器的语句必须是子类构造器的第一条语句
如果子类的构造器没有显式的调用超类的构造器,则将自动调用超类默认的构造器,如果超类没有不带参数的构造器,并且在子类的构造器中又没有显式的调用超类其他的构造器,则Java会编译错误
5.4关于关键字this和super
this有两个用途,一个是引用隐式参数,而是调用该类其他的构造求。
同样super也有两个用途,一个是调用超类的方法,一个是调用超类的构造器,对子类进行构造
super(参数)
C++注释:在C++的构造函数中,使用初始化列表语法调用超类的构造函数,而不调用super。在C++中manager的构造函数如下所示
manager::manager(参数列表):Employee(参数列表)
{
bonus=0;
}
Java语言程序设计中,定义类时除了要使用class 关键字说明所定义的数据类型是类,还可以在 class 之前增加若干类的修饰符来限定所定义类的操作特性,说明类的属性。
类的修饰符分为:可访问控制符和非访问控制符两种。
可访问控制符是: 公共类修饰符 public
非访问控制符有:抽象类修饰符 abstract
最终类修饰符:final
不加修饰符的时候 即直接声明 class A{ }
在这种情况下,class前面没有加任何的访问修饰符,通常称为“默认访问模式”,在该模式下,这个类只能被同一个包中的类访问或引用,这一访问特性又称包访问性。
公共类的修饰符 public
一个java的源文件中,规定最多只能有一个public 类,当然也可以一个都没有。如果有public公共类,则规定文件名只能public 公共类的类名称一致,若是没有,则文件名可以任意。作为一个java程序的入口(javaSE)的类必须为public类。
所谓公共类是指这个类可以被所有的其它类或其它包中的类访问和引用,也就是说这个类作为一个整体,是可见的、可以使用的,程序的其它部分可以创建这个类的对象、访问这个类内部公共的 (用可访问控制符 public 定义的 )变量和方法。
哪些类应定义为公共类呢?
(1)个Java程序的主类都必须定义为公共类,用 public 修饰;
(2)作为公共工具供其它类和程序使用的类应定义为公共类,用 public 修饰。
抽象类修饰符 abstract
凡是用修饰符 abstract修饰的类,被称为抽象类。接口是一个100%的纯抽象类。
最终类修饰符 final
当一个类不可能有子类时(final类是不可以被继承的)可以用修饰符 final把它说明为最终类。
被定义为 final类通常是一些有固定作用、用来完成某种标准功能的类。如Java系统定义好的用来实现网络功能的InetAddress、Socket等类都是 final类。
如果把有继承关系的类用树表示出来,不难看到树的叶结点应该被定义为final最终类。
将一个类定义为 final 类。就可以把它的属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能正确无误。
注意:修饰符abstract和修饰符final 不能同时修饰同一个类,因为abstract类是没有具体对象的类,它必须有子类,即就是是用来被继承的;而 final类是不可能有子类的类,所以用abstract和final修饰同一个类是无意义的。