abstract class Geometry{ public abstract double getArea(); public abstract double getPerimeter(); } class TuXing{//计算图形面积,调用抽象类的上转型对象来调用重写的函数 Geometry geometry; public TuXing(Geometry geometry) { this.geometry = geometry; } public double getS() { if (geometry == null) { System.out.println("没有边长或半径无法计算"); return -1; } return geometry.getArea(); } public double getC() { if (geometry == null) { System.out.println("没有边长或半径无法计算"); return -1; } return geometry.getPerimeter(); } } class FangXing extends Geometry{ int height; int wideth; public FangXing(int height, int wideth) { this.height = height; this.wideth = wideth; } @Override public double getArea() { System.out.println("方形的面积为:"+height*wideth); return 0; } @Override public double getPerimeter() { System.out.println("方形的周长为:"+(height+wideth)*2); return 0; } } class yuan extends Geometry{ double r; public yuan(double r) { this.r = r; } @Override public double getArea() { System.out.println("圆的面积为:"+r*r*3.14); return 0; } @Override public double getPerimeter() { System.out.println("圆的周长为:"+r*2*3.14); return 0; } } TuXing tuXing ; Geometry geometry = null; tuXing = new TuXing(geometry); System.out.println(tuXing.getS()); geometry = new FangXing(10,20); tuXing = new TuXing(geometry); tuXing.getS();//输出长方形 tuXing.getC(); geometry = new yuan(10); tuXing = new TuXing(geometry); tuXing.getS();//输出圆 tuXing.getC(); geometry = new FangXing(10,10); tuXing = new TuXing(geometry); tuXing.getS();//输出正方形 tuXing.getC();