Java可以定义这样的一个类:这个类不能创建对象。它的目的只是表示一个想法或是一个框架,提供给其他类的对象共用。这样的类称为抽象类。
在类声明中需要使用abstract
关键字来声明一个抽象类。
例如,下面的代码声明一个Shape
的抽象类:
public abstract class Shape { }
下面的代码为Shape
类添加了一个draw()
方法。
public abstract class Shape { public Shape() { } public abstract void draw(); }
抽象类不一定要求它具有至少一个抽象方法。如果一个类有一个被声明或继承的抽象方法,它必须被声明为抽象类。抽象方法的声明方式与任何其他方法相同,只是在方法的最后加上分号表示,并且不会有任何执行代码语句。
下面的Shape
类有抽象和非抽象方法。
abstract class Shape { private String name; public Shape() { this.name = "Unknown shape"; } public Shape(String name) { this.name = name; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } // 带有分号,表示为抽象方法 public abstract void draw(); public abstract double getArea(); public abstract double getPerimeter(); }
下面的代码展示了如何创建一个Rectangle
类,它继承自Shape
类。
class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { // Set the shape name as "Rectangle" super("Rectangle"); this.width = width; this.height = height; } // Provide an implementation for inherited abstract draw() method public void draw() { System.out.println("Drawing a rectangle..."); } // Provide an implementation for inherited abstract getArea() method public double getArea() { return width * height; } // Provide an implementation for inherited abstract getPerimeter() method public double getPerimeter() { return 2.0 * (width + height); } }
这个 Rectangle
类要实现父类Shape
类中的所有抽象方法,否则会有错误出现。