Java抽象类简单介绍
关注微信公众号:Java编程中心。回复【学习资料】免费获得学习视频等…欢迎你的加入,就等你了
抢先看
如果自下而上在类的继承层次结构中上移,位于上层的类更具有通用性,甚至可能更加抽象。从某种角度上来说,祖先类更加通用,人们只将它作为派生其他类的基类,而不作为想使用的特定的实例类。例如:考虑一下对Employee类层次的扩展。一名雇员是一个人,一名学生也是一个人。下面将类Persion和类Student添加到类的层次结构上。
为什么要花费精力进行这样的高层次的抽象呢?每个人都有一些诸如姓名的这样的属性。学生和雇员都有属性姓名。因此可以将getName方法放置在位于继承关系较高层次的通用超类中。现在,再增加一个getDescription方法,它可以返回对一个人的尖端简述。例如:
an employrr with a salary of $50,000,00
a student majoring in computer science
在Employee类和Student类中实现这个方法很容易。但是在Person类中应该提供什么的内容呢?除了姓名之外,Person类一无所知。当然,可以让Person、getDescription()返回一个空字符串。然而,还有一个更好的方法,就是使用abstract关键字,这样就不完全不需要实现这个方法了。
public abstract String getDesciption();
为了提高程序清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。
public abstract class Person
{
...
public abstract String getDescription();
}
除了抽象方法之外,抽象类还可以包含具体数据和具体方法。例如,Person类保存着姓名和一个返回姓名的具体方法。
public abstrct class Person{
private String name;
public Person(String name);{
this.name=name;
}
public abstract String getDesciption();
public String getName(){
return name;
}
}
抽象方法充当着占位的角色,它们的具体实现在子类中。扩展抽象类可以由两种选择。一种是在抽象类中定义部分抽象类中定义部分抽象类方法或不定义抽象类方法,这样就必须将子类也标记为抽象类;另一种是定义全部的抽象方法,真阳一来,子类就不是抽象的了。
例如:通过扩展抽象Person类,并实现getDesciption方法;来定义Student类。由于在Student类中不再含有抽象方法,所以不必将这个类声明为抽象的。
类即使不含抽象方法,也可以将类声明为抽象类。