Java抽象类和方法

Java抽象类和方法

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类中的所有抽象方法,否则会有错误出现。