当多个类中出现了相同的功能,但功能主体不同,这时可以向上抽取,只抽取功能的定义,不抽取功能的主体;
抽象方法一定定义在抽象类中;
抽象方法和抽象类都必须被abstract关键字修饰;
抽象类不可以用new创建对象,因为调用抽象方法没有意义;
抽象类中的方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用;
如果子类只复写了部分抽象方法,那么该子类还是抽象类;
抽象类和一般类没有太大的不同,只是抽象类比一般类多了抽象方法,抽象类不可以实例化。
//员工类,是一个抽象类
abstract class Emp
{
//成员变量
private String name;
private String num;
private double sal;
//构造函数
public Emp(String name,String num,double sal)
{
this.name=name;
this.num=num;
this.sal=sal;
}
//抽象方法
public abstract void work();
}
//普通员工继承员工类
class BaseEmp extends Emp
{
//普通员工类的构造函数
public BaseEmp(String name,String num,double sal)
{
super(name,num,sal);
}
//普通员工类复写父类的抽象方法
public void work()
{
System.out.println("BaseEmp work..");
}
}
//经理类继承了员工类
class Manager extends Emp
{
//经理比员工类多了一个成员变量
private double bonus;
//经理类的构造函数
public Manager(String name,String num,double sal,double bonus)
{
super(name,num,sal);
this.bonus=bonus;
}
//经理类复写父类的抽象方法
public void work()
{
System.out.println("Manager work..");
}
}
class ExampleAbstractClass
{
public static void main(String[] args)
{
BaseEmp be=new BaseEmp("zhangsan","11111",90);
be.work();
Manager ma=new Manager("lisi","2222",90,300);
ma.work();
}
}
|