// 父类
class Shape {
public void draw() {
System.out.println("绘制图形");
}
}
// 子类1:圆形
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public void draw() {
System.out.println("绘制圆形");
}
public double calculateArea() {
return Math.PI * radius * radius;
}
}
// 子类2:矩形
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public void draw() {
System.out.println("绘制矩形");
}
public double calculateArea() {
return length * width;
}
}
// 测试类
public class Main {
public static void main(String[] args) {
Shape myCircle = new Circle(5); // 创建 Circle 对象
Shape myRectangle = new Rectangle(3, 4); // 创建 Rectangle 对象
myCircle.draw(); // 调用 Circle 的 draw 方法
System.out.println("圆形面积为:" + ((Circle) myCircle).calculateArea()); // 调用 Circle 特有的 calculateArea 方法
myRectangle.draw(); // 调用 Rectangle 的 draw 方法
System.out.println("矩形面积为:" + ((Rectangle) myRectangle).calculateArea()); // 调用 Rectangle 特有的 calculateArea 方法
}
}
在这个例子中,Shape 类是父类,而 Circle 和 Rectangle 类是它的子类。它们都继承了 Shape 类的 draw() 方法,但是在子类中对该方法进行了重写,以实现各自不同的绘制方式。同时,子类中还新增了特有的方法 calculateArea(),实现了方法的重载和多态性的体现。
在 Main 类中,创建了一个 Circle 对象和一个 Rectangle 对象,并分别调用了它们的 draw() 方法和特有的 calculateArea() 方法,展示了多态性的不同表现形式。这个例子中,通过将 Shape 类声明为父类,并将 Circle 和 Rectangle 类声明为其子类,实现了多态性的体现。同时,通过在子类中对父类方法进行重写和新增特有的方法,实现了方法的重载和多态性的体现。