如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
比如:
说明:
Graph的draw方法并没有什么具体的作用,像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法,包含抽象方法的类我们称为 抽象类。(abstract class)
在Java中,一个类如果被 abstract 修饰,这个类就称为抽象类。抽象类中被 abstract 修饰的方法称为 抽象方法,抽象方法不用给出具体的实现体。
// 抽象类:被abstract修饰的类
public abstract class Graph {
// 抽象方法:被abstract修饰的方法,没有方法体
abstract public void draw();
abstract void calcArea();
// 抽象类也是类,也可以增加普通方法和属性
public double getArea(){
return area;
}
protected double area; // 面积
}
注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。
可以看到代码报错。
代码报错
注意:抽象方法没有加访问限定符时,默认是public。
代码报错
代码会报错
abstract class Graph1 {
abstract public void draw();//画图形
abstract void calcArea();
public double getArea(){
return area;
}
protected double area;
}
//矩形类
class Rectangle extends Graph1 {
private double length;
private double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public void calcArea(){
area = length * width;
}
}
//圆形类
class Cycle extends Graph1 {
private double r;
final private static double PI = 3.14;
public Cycle(double r){
this.r = r;
}
public void draw(){
System.out.println("圆:r = "+r);
}
public void calcArea(){
area = PI * r * r;
}
}
//三角形类
class Triangle extends Graph1 {
private double a;
private double b;
private double c;
@Override
public void draw() {
System.out.println("三角形:a = " + a + " b = " + b + " c = " + c);
}
}
public class TestDemo {
}
当实际工作不应该由父类完成,而应由子类完成.。那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的。但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。
就像上面的图形例子,画图形的实现不是父类来完成的,而是由子类来完成的。
【总结】