Java中的继承(一)

Java中类之间的关系之一就是继承。很多程序设计语言都具有继承这个特性。

在Java程序设计语言中,使用extends关键字表示一个类派生于另外一个类。习惯上,被派生的类成为超类,派生的类成为子类。一般的,子类会具有比超类更多的数据和功能。

继承的含义就如它的字面意思,当子类继承了超类之后,子类就拥有了超类的域和方法。简单的来说,继承看上去有些类似于复制。并且子类可以被当作超类的数据类型进行使用。Java中所有类都直接或者间接的继承于Object类,因此可以说Object类是所有Java类的超类,因此所有类类型都可以被当作Object类型使用。

再通过扩展超类定义子类的时候,仅需要指出子类与超类的不同之处。因此在设计类的时候,应该将通用的方法放置在超类中,通过继承获得超类的功能,而将具有特殊用途的方法放置在子类中,这种通用的功能放到超类中的做法十分普遍。

在Java中,子类可以增加域,增加方法或者覆盖以重写超类的方法,但是子类却不能删除任何继承的域或者方法。另外,子类不能访问超类的私有方法。

Java中使用super关键字来达到调用超类的构造器或是方法的目的。但是使用super调用超类构造器的语句只能是子类构造器的第一条语句。如果子类的构造器没有显式地调用超类的构造器,则将自动的调用超类的默认的,也就是没有参数的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中没有显式地调用超类的其他构造器,那么Java编译器就会报告错误。

Java类的继承层次可以是无限的,只要有需要,可以一个个继承下去。子类可以继承超类,超类可以再继承另外一个类。

如果希望一个类不能被继承的话应该使用final关键字,这样便不能被其他的类所继承。如果有类继承自final类,那么编译器将报告错误。另外abstract抽象类可以被继承,但是却不可以被实例化,换句话说也就是不能创建abstract抽象类的对象。

注意,Java不支持多重继承,也就是说只能继承一个类,但是可以继承多个至于接口。以后再说。

2 Comments

Leave a Comment.