第5章 子类与继承
5.1 子类与父类
继承是一种由己有的类创建新类的机制。利用继承,可以先定义一个共有属性的一般类,根据该一般类再定义具有特殊属性的子类,子类继承一般类的属性和行为,并根据需要增加它自己的新的属性和行为。
Java不支持多重继承,即子类只能有一个父类。
5.1.1 子类
在类的声明中,通过使用关键字extends来定义一个类的子类,格式如下:
class 子类名 extends 父类名{
…
}
5.1.2 类的树形结构
如果一个类(除了object类)的声明中没有使用extends关键字,这个类被系统默认为是object的子类。
5.2 子类的继承性
类可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明、定义的,另一部分是从它的父类继承的。
子类和父类在同一包中的继承性:public、protected、friendly。
子类和父类不在同一包中的继承性:public、protected。
5.3 子类与对象
5.3.1 子类对象的特点
父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,即子类不继承父类的私有成员变量。 如果子类和父类不在同一包中,子类不继承父类的友好成员变量。
5.3.2 关于instanceof运算符
当左面的操作元是右面的类或其子类所创建的对象时,instanceof运算的结果是true,否则就是false。
5.4 成员变量的隐藏和方法重写
5.4.1成员变量的隐藏
所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏所继承的成员变量。
5.4.2 方法重写
子类通过重写可以隐藏已继承的方法。
(1)重写的语法规则:如果子类可以继承父类的某个方法,那么子类就有权利重写这个方法;
(2)重写的目的:子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
(3)重写的注意事项:重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限。
5.5 super关键字
在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。
5.6 final关键字
final关键字可以修饰类、成员变量和方法中的局部变量。
5.6.1 final类
可以使用final将类声明为final类。final类不能被继承,即不能有子类。
5.6.2 final方法
如果用final修饰父类中的一个方法,那么这个方法不允许子类重写,也就是说,不允许子类隐藏可以继承的final方法。
5.6.3 常量
如果成员变量或局部变量被修饰为final,那它就是常量。由于常量在运行期间不允许再发生变化,所以常量在声明时没有默认值,这就要求程序在声明常量时必须制定该常量的值。
5.7 对象的上转型对象
(1)上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
(2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。
5.8 继承与多态
多态性是指父类的某个方法被其子类重写时,可以个字产生自己的功能行为。
5.9 abstract类和abstract方法
对于abstract方法,只允许声明,不允许实现(没有方法体),而且不允许使用final和abstract同时修饰一个方法或类,也不允许使用static修饰abstract方式,即abstract方法必须是实例方法。
①abstract类中可以有abstract方法;②abstract类不能用new运算符创建对象;③abstract类的子类可以重写父类的abstract的方法,也可以继承父类的abstract方法;④abstract类的对象作上转型对象。