10.5 抽象类
抽象类顾名思义就是用来表达抽象事物,这里的抽象是指属性或者行为不确定,例如这是一个抽象类,Figure是图形的意思。这里用到了关键字abstract,用在class的前面,这个类就是抽象类。抽象类的一大特点就是允许函数没有函数体,如下方的sqr以及cc这两个方法:
public abstract class Figure{
protected double lengthSize;
public Figure(){
System.out.println("Figure缺省构造函数被调用");
}
/**
返回图形的面积
*/
public abstract double sqr();
/**
返回图形的周长
*/
public abstract double cc();
}
抽象类的创建类的页面,可以勾选,选中了abstract,那么这个类就是抽象的:

关于抽象类,有以下几个要点:
1.class前面带abstract关键字的类就是抽象类
2.抽象类无法实例化。例如这样的语句是错误的:Figure f=new Figure();
3.抽象类里面可以有抽象方法。抽象方法是带abstract关键字的方法,不能有函数体(也就是没有实现)。
抽象方法只能存在于抽象类中。如上面代表的sqr和cc两个方法。因为图形过于抽象,连边有几条都没有确定,所以无法计算面积和周长。
4.任何类继承抽象类,只要它不是抽象类,都要实现抽象类里面的方法。属性具体后就可以实现之前不能实现的函数了。例如前面章节的Rectangle类,继承了Figure后,就必须实现sqr和cc方法:
public class Rectangle extends Figure{ protected double length; protected double height; public Rectangle(double length,double height){ System.out.println("Rectangle构造函数调用中"); this.length=length; this.height=height; } public double sqr(){ return length*height; } public double cc(){ return 2*(length+height); }}
如果没有实现,会报语法错误:
在eclipse创建类的时候,就可以选择超类(父类),如图所示,可以手写类名,也可以点击浏览搜索:
这是点击浏览后输入类名的搜索界面:
填上Figure(要注意的是,使用eclipse创建一个类的时候,默认是实现父类的抽象方法的,我们可以看到,倒数第二个选项是默认勾上的):