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

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

以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`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++程序中的抽象类
69 0
|
6月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
62 0
C++的纯虚函数和抽象类
在C++中,可以将虚函数声明为纯虚函数,语法格式为: virtual 返回值类型 函数名 (函数参数) = 0; 纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。 最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。 包含纯虚函数的类称为抽象类(Abstract Class)。之所以说它抽象,是因为它无法实例化,也就是无法创建对象。原因很明显,纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间。抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。纯虚函数使用举例:
|
Java 编译器
认识抽象类
认识抽象类
83 0
|
程序员 C# 索引
知识回顾:抽象类与抽象方法
知识回顾:抽象类与抽象方法
109 0
抽象类和抽象方法
抽象方法abstract public void Func();声明了abstract 不能有函数体 声明了virtual可以有函数体
524 0