abstract的性质

1、abstract(抽象)可以修饰类、方法
2、如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。
3、abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。
4、abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。
5、final和abstract永远不会同时出现,因为abstract就是要被继承的,而被final修饰的类不可能被继承。
6、当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。

abstract void print();

如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。
如果一个类为抽象类,那么其中可能有非抽象的方法。
如果一个抽象类中有两个抽象方法,子类继承以后必须实现这两个抽象方法,如果只实现其中一个,那个子类还是抽象类。

抽象类VS一般类

1、抽象类和一般类没有什么太大的不同,该如何描述事物就如何描述事物,只不过,该事物出现了一些看不懂的东西。这些不确定的部分,也是该事物的狗功能,需要明确出现,但是无法定义主体。
2、抽象类比一般类多了抽象函数。就是在类中可以定义抽象方法。
3、抽象类不可以实例化。
4、抽象类中可以没有抽象方法。这样做仅仅是为了不让该类建立对象。

举例

要求:
假如我们在开发一个系统时需要对员工进行建模,员工包含3个属性;姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另外还有一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。

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

}
class Pro extends Employee{

    public Pro(String name, String id, double pay) {
        super(name, id, pay);
    }

    @Override
    public void work() {
        System.out.println("Pro work");
    }
}