抽象类
抽象就是把一些具体有共同点的东西,单独抽离出来,形成一个抽象的模板。
抽象成一套模板,这样子,可以有助于复用。
抽象类的规则
- 有抽象方法的类就是抽象类,抽象方法就是没有方法体的方法,只是声明了没有实现的
- public abstract void work(); //这就是一个抽象方法,被abstract所修饰
- 抽象类一定要被abstract 这个关键字所修饰
- 普通类继承抽象类的关键字是extends,而且继承抽象类,一定要实现抽象类的抽象方法。
- 抽象类不能被实例化,但是可以通过多态new出来
- 抽象方法不可以被private修饰,如果抽象方法被private修饰,那么子类不可见,就无法重写了
- 抽象类不可以被final来修饰 , 如果被final修饰,这个类就不能被继承了;
- 抽象类中不仅有抽象方法,也会有普通方法,普通方法不需要都被重写,但是抽象方法要求全部被重写
- 抽象类中可以有构造方法,new子类实例的时候,就先调用抽象类的构造方法,再去调用子类自身的
- 如果不想重写抽象类里的抽象方法,子类一定也是一个抽象类
- 抽象类一定是一个父类,只有子类继承才能被实例化
- 抽象类是单继承的,接口是多继承的。
- 外部抽象类不能被static修饰,内部抽象类可以被static 修饰,调用内部类的方法就是A.B ,当成一个类来使用。抽象类内部放一个抽象类。
这就是一个抽象类
package test;
//描述雇员。
abstract class Employee{
private String name ;
private String id ;
private double pay ;
Employee(String name,String id, double pay){
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
public void get(){
System.out.println("aaa");
}
}
//描述程序员
abstract class sss extends Employee{
sss(String name,String id, double pay){
super(name,id,pay);
}
public void work(){
System.out.println("code..." );
}
}
//描述程序员
class Programmer extends Employee{
Programmer(String name,String id, double pay){
super(name,id,pay);
}
public void work(){
System.out.println("code..." );
}
}
//描述经理
class Manager extends Employee{
private int bonus ;
Manager(String name,String id, double pay,int bonus){
super(name,id,pay);
this.bonus = bonus;
}
public void work(){
System.out.println("manage" );
}
}
这个是测试的主方法,这个地方体现了多态,很巧妙,可以通过接口或者抽象类,根据不同的子类,来new出不同的对象
public static void main(String[] args) {
Employee employee = new Manager("cc","cc",1,12);
Employee getEmployee = new Programmer("aa","12",13);
employee.work();
getEmployee.work();
}