类的继承导致父类的抽象
在继承过程中,祖先类会更加通用,有时只将它作为派生其他类的基类
,而不用将其实例化
。
例如父类Person,和它的子类Student 、Employee。
为什么要花费精力进行这样高层次的抽象呢?
当Student类和Employee类中有相同的属性或相同的方法时,可以将这些方法放置在位于继承关系较高层次的通用超类中
如getName()和num都可以放置到Person方法中。
但是现在新增一个getDescription方法,可以返回对一个人的简短描述,这时可以在三个类中都实现
这个方法(对于Person可以返回一个空字符串)。
但是有更好的方法,就是使用abstract,这样就不用实现
这个方法了。
public abstract String getDescription();
抽象方法–>抽象类
为了提高程序的清晰度
,包含一个或多个抽象方法的类必须
被声明为抽象类。
同时,除抽象方法之外,抽象类可以包含具体的数据和方法。(建议将通用的域和方法放入父类中)
public abstract class Person{
private String name;
public String getName(){return name;}
...
public abstract String getDescription();
}
特点
抽象方法充当着占位
的角色,其具体实现在子类中。
继承抽象类的子类可以有两种选择
- 在子类中定义
部分
的抽象方法,但这时子类也必须被标记为抽象类。- 在子类中定义
全部
的抽象方法。这时子类就不是抽象的了。
抽象类不可实例化
。但可以定义一个抽象类的对象变量
,用于引用非抽象子类的对象。