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

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

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



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


相关文章
|
27天前
|
存储 Java
抽象类与抽象方法
抽象类和抽象方法是面向对象编程中的重要概念。抽象类不能被实例化,主要用于定义子类的通用接口或行为。抽象方法是在抽象类中声明但未实现的方法,要求子类必须实现这些方法。这种方式有助于构建灵活且可扩展的代码结构。
64 2
|
25天前
抽象类
作用:类似“模板”,其目的是要设计者依据它的格式来修改并创建新的类,但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象,只能单继承 定义及使用规则: 1)包含一个抽象方法的类必须是抽象类 2)抽象类和抽象方法都要使用abstract关键字声明 3)抽象方法只需声明而不需要实现 4)抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法
17 0
|
7月前
|
C++
C++程序中的抽象类
C++程序中的抽象类
80 0
|
7月前
|
程序员 C#
C#抽象类和抽象方法详解
C#抽象类和抽象方法详解
78 0
|
Java 编译器
认识抽象类
认识抽象类
90 0
|
程序员 C# 索引
知识回顾:抽象类与抽象方法
知识回顾:抽象类与抽象方法
114 0
抽象类和抽象方法
抽象方法abstract public void Func();声明了abstract 不能有函数体 声明了virtual可以有函数体
528 0