第一部分:接口与类的实现
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()方法来验证实现是否正确。