第一部分:接口与类的实现
Shape接口
java复制代码public interface Shape { double getArea(); double getPerimeter();
}
Circle类
public class Circle implements Shape { private double r; public Circle(double r) { this.r = r; } @Override public double getArea() { return Math.PI * r * r; } @Override public double getPerimeter() { return 2 * Math.PI * r; }
}
Rectangle类
public class Rectangle implements Shape { private double x; private double y; public Rectangle(double x, double y) { this.x = x; this.y = y; } @Override public double getArea() { return x * y; } @Override public double getPerimeter() { return 2 * (x + y); }
}
测试类
public class ShapeTest { public static void main(String[] args) { Circle circle = new Circle(5); System.out.println("Circle Area: " + circle.getArea()); System.out.println("Circle Perimeter: " + circle.getPerimeter()); Rectangle rectangle = new Rectangle(4, 6); System.out.println("Rectangle Area: " + rectangle.getArea()); System.out.println("Rectangle Perimeter: " + rectangle.getPerimeter()); }
}
第二部分:抽象类与类的实现
ShapeClass抽象类
public abstract class ShapeClass { public abstract double getArea(); public abstract double getPerimeter();
}
CircleClass类
public class CircleClass extends ShapeClass { private double r; public CircleClass(double r) { this.r = r; } @Override public double getArea() { return Math.PI * r * r; } @Override public double getPerimeter() { return 2 * Math.PI * r; }
}
RectangleClass类
public class RectangleClass extends ShapeClass { private double x; private double y; public RectangleClass(double x, double y) { this.x = x; this.y = y; } @Override public double getArea() { return x * y; } @Override public double getPerimeter() { return 2 * (x + y); }
}
测试类
public class ShapeClassTest { public static void main(String[] args) { CircleClass circle = new CircleClass(5); System.out.println("Circle Area: " + circle.getArea()); System.out.println("Circle Perimeter: " + circle.getPerimeter()); RectangleClass rectangle = new RectangleClass(4, 6); System.out.println("Rectangle Area: " + rectangle.getArea()); System.out.println("Rectangle Perimeter: " + rectangle.getPerimeter()); }
}
在这两个实现中,第一部分使用了接口来定义公共行为,而第二部分使用了抽象类。抽象类提供了部分实现(尽管在这个例子中没有),并且可以包含非抽象的方法,而接口中的所有方法都是抽象的。在测试类中,我们分别创建了圆和长方形的实例,并调用了它们的getArea()和getPerimeter()方法来验证实现是否正确。