疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

类的继承—[疯狂java讲义]


 

类的继承
 
        继承是面向对象三大特征之一,也是实现软件复用的重要手段。Java的继承具有单继承的特点,每个子类只有一个直接父类。
 
继承的特点
 
        Java的继承通过extends关键字来实现,实现继承的被称为子类,被继承的类被称为父类,有的也称其为基类、超类。父类和子类的关系,是一种一般和特殊的关系。例如水果和苹果的关系,果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。
 
        因为子类是一种特殊的父类,因此父类包含的范围总比子类包含的范围要大,所以可以认为父类是大类,而子类是小类。
 
        Java里子类继承父类的语法格式如下:
 
修饰符 class SubClass extends SuperClass
{
//类定义部分
}
 
         从上面语法格式来看,定义子类的语法非常简单,只需在原来的类定义上增加extends SuperClass即可,即表明该子类继承了SuperClass类。
 
         Java使用extends作为继承的关键字,extend关键字在英文是扩展,而不是继承!这个关键字很好地体现了子类和父类的关系:子类是对父类的扩展,子类是一种特殊的父类。从这个意义上来看,使用继承来描述子类和父类的关系是错误的,用扩展更恰当。因此这样说法更加准确:Apple类扩展了Fruit类。
 
         为什么国内把extends翻译为继承呢?除了与历史原因有关之外,把extends翻译为继承也是有其理由的:子类扩展了父类,将可以获得父类的全部属性和方法,这与汉语中的继承(子辈从父辈那里获得一笔财富称为继承)具有很好的类似性。值得指出的是:Java的子类不能获得父类的构造器。   
 
          Java语言摒弃了C++中难以理解的多继承特征,即每个类最多只有一个直接父类。例如下面代码将会引起编译错误:
 
class SubClass extends Base1,Base2,Base3{…}
 
         很多书在介绍Java的单继承时,可能会说 Java类只能有一个父类,严格来讲,这种说法是错误的,应该换成如下说法:Java类只能有一个直接父类,实际上,Java类可以有无限多个间接父类。例如:
 
class Fruit extends Plant{…}
class Apple extends Fruit{…}
 
         上面类定义中Fruit是Apple类的父类,Plant类也是Apple类的父类。区别是Fruit是Apple的直接父类,而Plant则是Apple类的间接父类。(摘自[疯狂java讲义])