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

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

以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`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()`方法来计算和显示它们的面积和周长。



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


相关文章
抽象类
Java中的抽象类是一种特殊的类,它可以包含抽象方法和普通方法。抽象方法是没有实现的方法,只有声明,没有实现。抽象类不能被实例化,只能被继承。继承抽象类的子类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。抽象类可以有构造函数,但是不能是public或者protected,只能是private或者protected。抽象类可以有静态方法,也可以有非静态方法。抽象类可以有成员变量,也可以有静态成员变量。抽象类可以被继承,也可以被实现接口。
|
6月前
|
C++
C++程序中的抽象类
C++程序中的抽象类
70 0
|
6月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
63 0
|
11月前
纯虚函数和抽象类
纯虚函数和抽象类
51 0
|
Java 编译器
认识抽象类
认识抽象类
84 0
|
程序员 C# 索引
知识回顾:抽象类与抽象方法
知识回顾:抽象类与抽象方法
111 0
抽象类和抽象方法
抽象方法abstract public void Func();声明了abstract 不能有函数体 声明了virtual可以有函数体
524 0