当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。
当一个类中存在抽象方法时,需要将该类声明为abstract。
public class Abstract01 {
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public abstract void eat();
}
}
一般抽象类会被继承,由其子类实现抽象方法。如果一个类继承了抽象类,就必须要实现抽象类中的所有抽象方法。
一个抽象类是不能被实例化的。
抽象类也可以没有抽象方法。
abstract关键字只能修饰类和方法,不能修饰属性和其他的。
抽象类本质上还是类,可以包括非抽象方法、构造器等。
抽象方法不能使用final、private和static来修饰。 因为这些关键字都与重写相违背。
案例:
父类
package com.edu.project;
abstract public class CommonEmployee {
public int id;
public String name;
public double salary;
public abstract void work();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public CommonEmployee(int id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
}
子类
package com.edu.project;
public class Manager extends CommonEmployee{
public double bonus;
public Manager(int id, String name, double salary, double bonus) {
super(id, name, salary);
this.bonus = bonus;
}
@Override
public void work() {
System.out.println("经理"+name+"正在工作中");
}
}
主函数
package com.edu.project;
public class Main_ {
public static void main(String[] args) {
Manager m1 = new Manager(1,"Mary",12000,1000);
m1.work();
}
}
经理Mary正在工作中
Process finished with exit code 0
抽象类最佳实践——模板设计模式