一、抽象类
在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。
例如,我们可以定义一个Geometry抽象类型代表几何图形。
abstract class Geometry {
private String color = "white";
protected Geometry() {
}
protected Geometry(String color) {
this.color = color;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return this.color;
}
public abstract double getArea();
}
其中,抽象类型用abstract修饰,类名和抽象方法。子类需要重写抽象方法,才能使其有效。
而抽象类的构造方法则使用protected修饰的。
接下里我们写一个Circle类和一个Rectangle类来继承这个抽象类。
class Circle extends Geometry{
private double radius = 1;
public Circle() {
}
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return this.radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getArea() {
return this.radius * this.radius * Math.PI;
}
}
class Rectangle extends Geometry{
private double width