抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java语言中使用abstract class来定义抽象类。

示例:

public abstract class Employee // 不能被实例化
{
  private String name;
  private String address;
  private int number;
  public Employee(String name, String address, int number) {
    System.out.println("Constructing an Employee");
    this.name = name;
    this.address = address;
    this.number = number;
  }
  public double computePay() {
    System.out.println("Inside Employee computePay");
    return 0.0;
  }
}
public class Salary extends Employee // 只有继承抽象类才能被实例化
{
  private double salary;
  public Salary(String name, String address, int number, double salary) {
    super(name, address, number);
    setSalary(salary);
  }
  public double getSalary() {
    return salary;
  }
  public void setSalary(double newSalary) {
    if(newSalary >= 0.0) {
      salary = newSalary;
    }
  }
  public double computePay() {
    System.out.println("Computing salary pay for " + getName());
    return salary/52;
  }
}

抽象方法

如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。

Abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract class Employee
{
  private String name;
  private String address;
  private int number;
  public abstract double computePay();
}
  • 如果一个类包含抽象方法,那么该类必须是抽象类。
  • 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress