以下是一个使用图形的继承关系的例子:

abstract class Shape {
    protected final double pi = 3.141592653589793;
    
    public abstract double calculateArea();
    public abstract double calculateVolume();
}

class Circle extends Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double calculateArea() {
        return pi * radius * radius;
    }
    
    @Override
    public double calculateVolume() {
        return 0;
    }
}

class Rectangle extends Shape {
    private double length;
    private double width;
    
    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }
    
    @Override
    public double calculateArea() {
        return length * width;
    }
    
    @Override
    public double calculateVolume() {
        return 0;
    }
}

class RectangleEx extends Rectangle {
    private double height;
    
    public RectangleEx(double length, double width, double height) {
        super(length, width);
        this.height = height;
    }
    
    @Override
    public double calculateArea() {
        return 2 * (length * width + length * height + width * height);
    }
    
    @Override
    public double calculateVolume() {
        return length * width * height;
    }
}

public class Main {
    public static void main(String[] args) {
        Circle circle = new Circle(5);
        System.out.println("Circle area: " + circle.calculateArea());
        System.out.println("Circle volume: " + circle.calculateVolume());
        
        Rectangle rectangle = new Rectangle(4, 6);
        System.out.println("Rectangle area: " + rectangle.calculateArea());
        System.out.println("Rectangle volume: " + rectangle.calculateVolume());
        
        RectangleEx rectangleEx = new RectangleEx(3, 4, 5);
        System.out.println("RectangleEx area: " + rectangleEx.calculateArea());
        System.out.println("RectangleEx volume: " + rectangleEx.calculateVolume());
    }
}

在这个例子中,抽象类Shape定义了计算面积和体积的抽象方法,以及常量pi。Circle和Rectangle类继承了Shape类,并实现了计算面积的方法,但它们的计算体积的方法返回0,因为它们是二维的几何形状。

另外,RectangleEx类继承了Rectangle类,并通过覆盖方法来实现自己的计算面积和体积的逻辑。在Main类中,创建了Circle、Rectangle和RectangleEx的实例,并调用它们的计算面积和体积的方法进行输出。

通过这个例子,可以看到继承的作用是可以从一个已有的类派生出新的类,并在新的类中添加额外的功能或修改已有的功能。同时,多态的作用是可以在使用抽象类或接口类型的地方,传入实际的子类实例,实现不同子类的特定行为

这个例子使用图形的继承关系为例来介绍继承和多态的应用。首先所有的图形都可以计算面积和体积因此声明一个抽象类Shape可利用它来派生出二维的几何形状类Circle和Rectangle把计算面积的方法声明在抽象类里pi值是常量把它声明在抽象类的数据成员里。又利用Rectangle来派生出二维的几何形状类RectangleEx。其中包含了类的继承、方法的覆盖等知识点。

原文地址: https://www.cveoy.top/t/topic/ibbz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录