java抽象类学习

时间:2021-10-19 15:30:16

帮助文档 <=> API文档 <=> 程序说明文档

姓名,年龄,工号
雇员类
普通员工类
经理类

abstract:抽象,即不具体,只能修饰类和方法,不能修饰变量等。

抽象方法:被abstract关键字修饰的方法,只有函数声明,没有函数体。

抽象类:被abstarct修饰的类。
形式上看,就是含有抽象方法的类,当然也可以一个抽象方法也没有,也可以将类修饰成抽象类,这样相当于禁止
该类创建类对象。
意义上看,抽象类是指,对抽象类所描述的事物在分析时,发现有一部分功能的功能内容是不确定的,但功能一定
存在。所以就将该部分功能定义成抽象方法,没有函数体,只有函数声明。
注意:抽象类不能用new创建对象。但可以声明该抽象类的引用变量。


抽象类被子类覆盖后,若子类想使用抽象类中的功能,则必须先覆写(覆盖)所有抽象方法,只有所有抽象方法都被覆盖
(覆写),才能够创建子类对象,来调用其中的方法,如果子类只覆盖(覆写)了一部分抽象方法,则子类也是一个抽象类
(即子类必须定义成一个抽象类,因为子类继承了父类,并且没有覆盖(覆写)所有的抽想方法,相当于子类中也存在一些
抽象的方法,所以子类必须定义成一个抽象类),若子类没有定义成抽象类,且没有覆盖(覆写)父类中的所有的抽象方法
,则编译会报错。

抽象类和一般类没有什么太大的区别,只有两点不同
1,抽象类中存在一些没有函数体,只有函数声明的方法。
2,抽象类不能创建实例,因为创建类对象后,引用没有函数体的方法没有意义。

抽象类和其他父类没有区别都是从子类上抽取而来,只不过,多个子类中的功能定义相同,功能内容不同,所以父类中没有
必要有方法体,就出现了抽象函数。抽象类虽不能创建对象,但是可以有构造方法和成员变量,成员函数,构造代码块,静态
代码块。和普通的父类没有什么区别,也可是使用多态技术,也可以使用super关键字进行访问。也存在覆盖(覆写)。也可
以直接拿过来用,继承了父类(抽象类)的方法,直接调用即可。

抽象类中的抽象方法,即被abstract修饰的方法,相当于强迫子类必须覆盖(覆写)该方法,否则就不能创建该子类对象。
final修饰方法刚好相反,是强制禁止覆盖(覆写)某一个方法。
*/

abstract class Employee
{
    private String name;
    private int age;
    private String id;
    Employee(String name,int age,String id)
    {
        this.name = name;
        this.age = age;
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public abstract void work();
}

class Manager extends Employee
{
    private int bonus;
    Manager(String name ,int age,String id,int bonus)
    {
        super(name,age,id);
        this.bonus = bonus;
    }
    public void work()
    {
        System.out.println("Manager work");
    }
}
class Pro extends Employee
{
    Pro(String name,int age,String id)
    {
        super(name,age,id);
    }
    public void work()
    {
        System.out.println("Pro work");
    }
}
abstract class Ceo extends Employee
{
    Ceo(String name ,int age ,String id)
    {
        super(name,age,id);
    }
    public void work()
    {
        System.out.println("Ceo work");
    }
}