一 什么是抽象类?
普通的类具有比较完善的功能,它可以直接直接产生实例化对象。而抽象方法具有抽象的方法,其实,就是因为有了抽象方法,一个“普通类变成了一个抽象类”。
抽象方法在抽象类中可以定义,但是可以不写,就是直接可以只有一个函数名称。什么时候实例化这个抽象类的时候。可以在子类中重写具体的这个方法。
二抽象类的使用
在我做的实验三中,我们主要内容是构造一个可复用性比较高的图,所以,对于图中的元素点,我对他进行了抽象类的定义:(由于这个抽象类比较复杂,我把他简化了一下
public abstract class Vertex {
String label; //点的内容
String[] args =new String[3]; //点的属性
public Vertex(String label) //构造函数
{
this.label=label;
}
{
this.label=label;
}
abstract void fillVertexInfo (String[] args); //抽象函数得到点的属性
}
这就是一个抽象类,但是 如果在直接 Vertex v = new Vertex(a); 是会报出错误,Vertex
是抽象的,无法直接进行实例化操作
。为什么不能直接实例化呢?当一个类实例化之后,就意味着这个对象可以调用类中的属性或者放过了,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。
因此 抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
我们看下面抽象类的具体化:
public class Word extends Vertex{
public Word(String label) {
super(label);
// TODO Auto-generated constructor stub
}
super(label);
// TODO Auto-generated constructor stub
}
@Override
void fillVertexInfo(String[] args) {
this.args = args;
}
void fillVertexInfo(String[] args) {
this.args = args;
}
}
这样 抽象类就被实例化了,我们可以直接new他的子类。 因此:
抽象类继承子类里面有明确的方法覆写要求,而普通类可以有选择性的来决定是否需要覆写;
抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样;
普通类对象可以直接实例化,但抽象类的对象必须经过向上转型之后才可以得到。