📜  Java中的abstract关键字(1)

📅  最后修改于: 2023-12-03 15:31:56.689000             🧑  作者: Mango

Java中的abstract关键字

介绍

在Java中,abstract是一个关键字。当用它修饰一个类、方法或属性时,就表示这个类、方法或属性具有抽象属性。

抽象属性意味着它们不是完整的,需要经过继承和重写才能得到完整的实现,也就是说,使用abstract关键字的类不能被实例化,只能作为父类被继承。同时,使用abstract关键字的方法必须被子类重写,而使用abstract关键字的属性必须被子类实现。

抽象类

在Java中,抽象类是具有抽象方法的类。抽象类不能直接实例化,只能被子类继承。抽象方法是没有具体实现的方法,只是方法签名的声明,没有方法体。

定义语法
public abstract class MyClass {
    // 抽象方法
    public abstract void myMethod();

    // 非抽象方法
    public void anotherMethod() {
        // 方法体
    }
}
注意事项
  • 包含抽象方法的类必须被声明为抽象类,abstract关键字在class前面。
  • 抽象类不能实例化,只能被继承。
  • 抽象方法不能使用private、final、static、native等关键字进行修饰。
  • 子类必须实现父类的所有抽象方法,否则子类也必须声明为抽象类。
抽象方法

抽象方法是一种没有实现的方法,只是声明了方法的签名。抽象方法必须声明在抽象类中,子类继承抽象类后必须实现抽象方法。

定义语法
public abstract void myMethod();
注意事项
  • 抽象方法没有方法体,只有方法的签名。
  • 抽象方法必须定义在抽象类中,abstract关键字在方法前面。
  • 子类必须实现抽象方法,否则子类也必须声明为抽象类。
  • 抽象方法不能使用private、final、static、native等关键字进行修饰。
示例
// 抽象类
abstract class Shape {
    // 抽象方法
    public abstract double getArea();

    // 非抽象方法
    public void print() {
        System.out.println("I am a shape.");
    }
}

// 圆类,继承自Shape抽象类
class Circle extends Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    // 实现抽象方法,计算圆的面积
    public double getArea() {
        return 3.14 * radius * radius;
    }
}

// 矩形类,继承自Shape抽象类
class Rectangle extends Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    // 实现抽象方法,计算矩形的面积
    public double getArea() {
        return length * width;
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        Circle circle = new Circle(2.0);
        Rectangle rectangle = new Rectangle(3.0, 4.0);

        // 输出圆的面积和矩形的面积
        System.out.println("Circle area: " + circle.getArea());
        System.out.println("Rectangle area: " + rectangle.getArea());
    }
}

以上代码展示了抽象类和抽象方法的基本用法,通过继承抽象类并实现抽象方法,可以完成对图形面积的计算,并利用多态机制调用不同的方法。