抽象类介绍
- 用abstract关键词来修饰一个类时这个类叫抽象类,
访问修饰符 abstract 类名{ } - 用abstract关键词来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名 (参数列表) 注意没有方法体 - 抽象类的价值更多在于设计,是设计好框架后,让子类继承并实现抽象类 ,在框架和设计模式使用较多
抽象类使用细节
- 抽象类不能被实例化
public class Abstract01 {
public static void main(String[] args) {
new A();
}
}
abstract class A{
}
- 抽象类不一定要包含abstract方法,但是一但有abstract方法,这个类必须声明成抽象类
- abstract只能修饰类和方法,不能修饰属性和其他的
- 抽象类可以有任意成员(抽象类本质还是类) 比如抽象方法,构造器,静态属性等
- 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法(重写),除非她自己也声明为abstrsact类
abstract class A{
public abstract void hi();
}
class B extends A{
@Override
public void hi() {
}
}
abstract class C extends A{
}
- 抽象方法不能使用private ,final,static来修饰,因为这些关键词都是与重写相违背的
抽象类的例子
public class abstractExercise01 {
public static void main(String[] args) {
Manager jack = new Manager("jack", "018", 100000);
jack.setBouns(10000);
jack.work();
CommonEmployee li = new CommonEmployee("li", "0188", 300000);
li.work();
}
}
abstract class Employee{
private String name;
private String id;
private double salary;
public Employee(String name, String id, double salary) {
this.name = name;
this.id = id;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public abstract void work();
}
class CommonEmployee extends Employee{
public CommonEmployee(String name, String id, double salary) {
super(name, id, salary);
}
@Override
public void work() {
System.out.println("普通员工"+getName()+"工作中");
}
}
class Manager extends Employee{
public Manager(String name, String id, double salary) {
super(name, id, salary);
}
private double bouns;
public double getBouns() {
return bouns;
}
public void setBouns(double bouns) {
this.bouns = bouns;
}
@Override
public void work() {
System.out.println("普通员工"+getName()+"工作中");
}
}