案例:对于几何图形,都有一些共同的属性,比如名字和面积,而计算面积的方法却不一样。本例子定义一个超类来实现输出名字的方法,并使用抽象方法来计算面积,代码有以下3步:
步骤一:定义一个抽象类Shape,该类中有2个方法,一个是获得图形名称的方法,使用反射机制获得类名称;另一个是获得图形面积的方法。
public abstract class Shape {
public String getName() {//获得图形的名称
return this.getClass().getSimpleName();
}
public abstract double getArea();//获得图形的面积
}
步骤2::创建圆形和矩形的类,都继承自Shape,并实现获得面积的抽象方法。
圆形:
public class Circle extends Shape {
private double radius;
public Circle(double radius) {//获得圆形的半径
this.radius = radius;
}
@Override
public double getArea() {//计算圆形的面积
return Math.PI * Math.pow(radius, 2);
}
}
矩形:
public class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {//获得矩形的长和宽
this.length = length;
this.width = width;
}
@Override
public double getArea() {//计算矩形的面积
return length * width;
}
}
步骤3::测试
public class Test {
public static void main(String[] args) {
Circle circle = new Circle(2);//创建圆形对象并将半径设置成1
System.out.println("图形的名称是:" + circle.getName());
System.out.println("图形的面积是" + circle.getArea());
Rectangle rectangle = new Rectangle(3, 5);//创建矩形对象并将长和宽设置成1
System.out.println("图形的名称是:" + rectangle.getName());
System.out.println("图形的面积是:" + rectangle.getArea());
}
}
测试结果如下图所示: