is-a关系是继承的一个明显特征,关键字extens表示继承
关键字extends表示正在构造的新生类生于一个已经存在的类,已存在的类成为超类(superclass)、基类(baseclass)或父类(parent class);新类称为子类(subclass)、派生类(derived class)或孩子类(child class)。
一继承的层次:继承并不仅仅限于一个层次,由一个公共超类派生出来的所有类的集合就是继承层次。在继承的层次中,从某个特定的类到其组向的路径被称为该类的继承链,一般来说,一个祖先类可以拥有多个子孙继承链。
二多态:有一个用来判断是否应该设计为继承关系的简单规则,就是is-a规则,它表明子类的每个对象也是超类的对象。eg:每个经理都是雇员,因此,将Manager类设计为Employee类的子类是显而易见的。
"is-a"规则其实就是我们设计模式中经常提到的里氏代换原则,任何父类出现的地方,子类一定可以出现。
三动态绑定:弄清楚调用对象方法的执行过程十分重要。下边来详细的了解一下:
A编译器查看对象的声明类型和方法名。假设调用x.f(param),并且隐式参数x声明为C类的对象。需要注意的是:可能存在多个名字为f,但参数类型不一样的方法。例如,可能存在方法f(int)和方法f(String)。编译器会一一列举所有的C类中名为f的方法和其超类中访问属性public且名为f的方法。(父类)
B接下来编译器将查看调用方法是提供的参数类型。如果在所有名为f的方法中存在一个与提供的参数类型完全匹配,就选择这个方法。这个过程被称为重载解析(overloadingresolution),例如调用x.f("hello")来说,编译器会挑选f(String),而不是f(int)。由于允许类型转换(int 可以转换为double等),所以这个过程可能很复杂。如果编译器没有找到参数类型匹配的方法,或者发现经过类型转换后有多个方法与之匹配,就会报告一个错误。
至此编译器已经获得需要调用的方法名字和参数类型