Java中的继承(四)

继承是自上而下逐个派生,如果反过来看继承的层次,越是底层的类越特殊,越是高层的类越通用。因此在上层的更加通用,甚至更加抽象。不同的类拥有相同的方法和域就会造成代码的过长,因此把相同的方法和域放置在一个通用的类中,让需要的类来继承是个好选择。

有时候超类仅仅是为子类提供用于继承的方法和域,而并不需要构造超类的对象,因此把超类设计成抽象类是最好的选择。Java中使用abstract关键字来构造抽象类。抽象类与普通的类最大的区别就是抽象类只能被继承,而不能被实例化。

例如有三种人群,根据分类可以是这样的继承方式:

inheritance

Employee和Studeng类都继承Person类,而Person类提供一个getDescription()方法。但是Employee和Student的描述肯定不一样,因此子类应该覆盖重写这个方法,但是超类可以返回一个空字符串,或者直接使用abstract关键字,将getDescription()方法声明为抽象方法。

public abstract String getDescription();

需要注意的是,只有抽象类中的方法才能够声明为抽象方法,因此包含抽象方法的类本身必须声明为抽象方法。

另外Java中,所有类的超类都是Object类,Object是所有类的超类。每一个Java类都是直接或者间接的继承于Object类。但是Java中却不需要明确的写继承自Object类。如果一个类没有继承另一个类,那么默认的继承于Object类。

如果查看Object类的代码,就会发现Object类并没有实现太多的功能。这也说明了超类的功能更通用更抽象。因此在设计类的时候,应该尽量将通用的方法放置于超类中。

1 Comments

Leave a Comment.