1.关于抽象类:
举例来说,现在有一个Employ类和Student类都继承了Person类,雇员类和学生类都有姓名这个属性,我们可以把getName方法放置于位于继承关系较高层次的通用超类Person中,
现在,再增加一个getDescription方法,它可以返回对一个人的简单描述,例如:
一个雇员年薪10万元
一个学生的专业是计算机科学与技术
在Employee和Student类中实现这个方法非常容易,但是在Person类中应该提供什么内容呢?除了姓名之外,Person类一无所知,当然,可以让Persong.getDescription()返回一个空字符串,然而还有一个更好的方法,就是使用abstract关键字,这样就完全不需要实现这个方法了:
public abstract String getDescription();//不需要实现方法
这里,为了提高程序的清晰性,包含一个或者多个抽象方法的类本身必须被声明为抽象的。
abstract class Person
{
public abstract String getDescription();
}
除了抽象方法之外,抽象类还可以包含具体数据和具体方法,例如,Person类还保存着姓名和一个返回姓名的具体方法:
abstract class Person
{
private String name;
public Person(Stirng n)
{
name=n;
}
public String getName()
{
return name;
}
public abstract String getDescription();
}
2.抽象类在实际中的运用:
实际中用到最多的是在抽象类中定义全部的抽象方法,这样一来,子类中就不是抽象的了。下面这段代码句式通过抽象类Person扩展一个具体的子类Student
class Studeng extends Person
{
private Stirng major;
public Studeng(Stirng n,String m)
{
super(n);
major=m;
}
public String getDescription()
{
return "学生的专业是"+major;
}
}
3.抽象类与接口的区别:
一个类可以只能继承一个抽象方法,但是一个类却可以实现多个接口,接口解决了Java单继承性的缺陷;
抽象类中可以有抽象的方法和普通的方法,属性可是是常量也可能是变量,而接口中只能有抽象方法,其属性都是常量;
抽象类和接口都不能被实例化;
在实际运用中,大多用的是接口,接口更加灵活,接口是抽象的抽象。
|