抽象类为什么有抽象方法?

简介: 抽象类为什么有抽象方法?

以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`Shape`,它定义了所有形状共有的行为和属性,同时允许具体的子类提供自己的实现。

 

首先,我们定义一个抽象类`Shape`:

```java

public abstract class Shape {

    // 形状的共有属性,颜色

    protected String color;

 

    // 构造函数,设置形状的颜色

    public Shape(String color) {

        this.color = color;

    }

 

    // 抽象方法,计算形状的面积

    public abstract double calculateArea();

 

    // 抽象方法,计算形状的周长

    public abstract double calculatePerimeter();

 

    // 非抽象方法,显示形状的颜色

    public void displayColor() {

        System.out.println("The shape is " + color + ".");

    }

}

```

在这个`Shape`类中,我们定义了一个保护属性`color`,它存储了形状的颜色。我们还定义了两个抽象方法`calculateArea()`和`calculatePerimeter()`,它们要求子类提供具体的实现来计算面积和周长。


此外,我们还提供了一个非抽象方法`displayColor()`,它用来输出形状的颜色信息。



接下来,我们创建两个具体的子类`Circle`和`Rectangle`,它们继承自`Shape`类,并实现抽象方法:

```java

public class Circle extends Shape {

    private double radius;

 

    // 构造函数

    public Circle(String color, double radius) {

        super(color);

        this.radius = radius;

    }

 

    // 实现计算面积的方法

    @Override

    public double calculateArea() {

        return Math.PI * radius * radius;

    }

 

    // 实现计算周长的方法

    @Override

    public double calculatePerimeter() {

        return 2 * Math.PI * radius;

    }

}

 

public class Rectangle extends Shape {

    private double width;

    private double height;

 

    // 构造函数

    public Rectangle(String color, double width, double height) {

        super(color);

        this.width = width;

        this.height = height;

    }

 

    // 实现计算面积的方法

    @Override

    public double calculateArea() {

        return width * height;

    }

 

    // 实现计算周长的方法

    @Override

    public double calculatePerimeter() {

        return 2 * (width + height);

    }

}

```

在`Circle`和`Rectangle`类中,我们添加了各自的属性,并提供了计算面积和周长的具体实现。这样,我们就可以根据具体的图形类型来创建对象,并使用它们的方法。

 

最后,我们可以创建一个简单的测试程序来演示这些类的使用:

```java

public class ShapeDemo {

    public static void main(String[] args) {

        // 创建一个圆形对象

        Circle circle = new Circle("Red", 5.0);

        // 创建一个矩形对象

        Rectangle rectangle = new Rectangle("Blue", 4.0, 6.0);

 

        // 显示形状的颜色

        circle.displayColor();

        rectangle.displayColor();

 

        // 计算并显示圆形的面积和周长

        System.out.println("Circle area: " + circle.calculateArea());

        System.out.println("Circle perimeter: " + circle.calculatePerimeter());

 

        // 计算并显示矩形的面积和周长

        System.out.println("Rectangle area: " + rectangle.calculateArea());

        System.out.println("Rectangle perimeter: " + rectangle.calculatePerimeter());

    }

}

```

在这个`ShapeDemo`类的`main`方法中,我们创建了一个红色的圆形和一个蓝色的矩形。我们调用了`displayColor()`方法来显示它们的颜色,以及调用了`calculateArea()`和`calculatePerimeter()`方法来计算和显示它们的面积和周长。



这个简单的例子展示了抽象类如何定义共有的行为和属性,以及具体的子类如何提供这些行为的具体实现。通过这种方式,我们可以创建一个灵活且可扩展的图形绘制程序,它可以轻松地添加新的形状类型。


相关文章
|
3月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
36 0
|
3月前
抽象方法
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
42 8
|
3月前
抽象类
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
25 0
|
3月前
3.抽象类
如何使用如何使用抽象类和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法 4.创建子类对象进行使用 关于抽象类: 1.抽象类不能创建对象,只能创建器非抽象的子类对象 2.抽象类中,可以有构造方法,是子类创建对象时,初始化父类成员用的。 3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类 4.抽象类的子类,必须重新抽象父类中的所有抽象方法和抽象方法: 1.不能直接创建new抽象类对象。 2.必须用一个子类来继承抽象父类 3.子类必须覆盖重写抽象父类当中所有的抽象方法
21 0
|
3月前
|
机器学习/深度学习 并行计算 图形学
CPU、GPU、TPU、NPU等到底是什么?
CPU、GPU、TPU、NPU等到底是什么?
157 3
|
3月前
|
机器学习/深度学习 自然语言处理 数据处理
什么是数据标注
什么是数据标注
137 0
|
3月前
|
人工智能 自然语言处理 安全
通义千问 2.5 “客串” ChatGPT4,你分的清吗?
这篇文章介绍了使用开源工具NextChat和Higress搭建的一个模拟ChatGPT和通义千问对话PK的测试场景。
87941 14
|
3月前
|
机器学习/深度学习 自然语言处理
解析GPT-3、GPT-4和ChatGPT关系-迈向自然语言处理的新高度“
解析GPT-3、GPT-4和ChatGPT关系-迈向自然语言处理的新高度“
|
3月前
|
人工智能 自然语言处理
Kimi Chat是什么模型?一文让你顿悟
Kimi Chat是什么模型?一文让你顿悟
227 0