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