定义抽象类
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
在面向对象的概念中,所有的对象都是通过类来生成的,但是反过来,并不是所有的类都能够生成对象,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造函数的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承后才能被使用(实现所有abstract
方法)。也正是给予这个原因,我们通常在设计阶段决定要不要设计抽象类,抽象类通常包含子类应具备的常见方法。
抽象类
在Java语言中我们使用abstract class
来定义抽象类。
代码示例
public abstract class Employee {
// 员工编号
protected int number;
// 员工姓名
protected String name;
// 员工薪资(年)
protected double salary;
public Employee(int number, String name) {
System.out.println("创建一个Employee对象, 编号:" + number + ", 姓名: " + name);
this.number = number;
this.name = name;
}
public String getName() {
return name;
}
public int getNumber() {
return number;
}
// 设置年薪资
public void setSalary(double newSalary) {
if (newSalary >= 0.0) {
this.salary = newSalary;
}
}
// 计算月薪资
public double computePay() {
return salary / 12;
}
public String toString() {
return "编号: " + number + ", 姓名: " + name;
}
}
注意到该Employee类没有什么不同,尽管该类是抽象类,但是它仍然有3个成员变量,7个成员方法和1个构造方法。 现在如果你尝试如下的例子:
public class AbstractDemo {
public static void main(String[] args) {
/* 以下是不允许的,会引发错误 */
Employee e2 = new Employee(12, "Tina Zhang");
e2.setSalary(90000);
System.out.println(e2.toString() + ", 月薪为: " + e2.computePay());
}
}
当你尝试编译AbstractDemo类时,会产生如下错误:
AbstractDemo.java:44: Employee is abstract; cannot be instantiated
Employee e2 = new Employee(12, "Tina Zhang");
^
1 error
在线练习
{$ activeFileHint $}