P157
继承
关键字extends
java用关键字extentds代替了C++中的冒号(:)在java中,所有的继承都是共有继承,而没有C++中的私有继承和保护继承
class Manager extends Employee
{
//方法和属性
}
注意:
- 已存在的类称为父类,超类
- 子类比超类拥有的功能丰富
- 子类调用超类的方法可以通过super.fangfa()来进行访问。
- 关键字this有两个用途:一是引用隐式参数,二是调用该类其他的构造器。同样,super关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。在调用构造器的时候,这两个关键字的使用方式很相似。调用构造器的语句只能作为另一个构造器的第一条语句出现。构造参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器。
- 如果将一个类声明为final,只有其中的方法自动地成为final,而不包括域。
-
注意点:
在Java中,所有的继承都是公有继承
类型转换instanceof -
this和super比较
我们希望调用超类Employee中的getSalary方法,而不是当前类的这个方法。为此,可以使用特定的关键字super解决这个问题:
关键字this有两个用途:一是引用隐式参数,二是调用该类其他的构造器。同样,super关键字也有两个用途:一是调用超类的方法,二是调用超类的构造器。在调用构造器的时候,这两个关键字的使用方式很相似。调用构造器的语句只能作为另一个构造器的第一条语句出现。构造参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器。 -
多态
一个对象变量(例如,变量e)可以引用多种实际类型的现象被称为多态(polymorphism)在Java程序设计语言中,对象变量是多态的。一个Employee变量既可以引用一个Employee类对象,也可以引用一个Employee类的任何一个子类的对象(例如,Manager、Executive等等) 。 -
动态绑定
- 动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对程序进行扩展。
假设增加一个新类Executive,并且变量e有可能引用这个类的对象,我们不需要对包含调用e.getSalary() 的代码进行重新编译。如果e恰好引用一个Executive类的对象,就会自动地调用Executive.getSalary()方法。 - 将一个子类的引用赋给一个超类变量,编译器是允许的。但将一个超类的引用赋给一个子类变量,必须进行类型转换,这样才能够通过运行时的检查。