抽象类 抽象方法 abstract

abstract:

 * abstract修饰类: 抽象类
 *       > 此类不能被实例化
 *       > 抽象类中一定要有构造器, 便于子类对象实例时调用(涉及子类对象实例化过程)
 *       > 开发中,都会提供抽象类的子类,让子类对象实例化.完成相关操作
 *
 *
 *
 * abstract修饰方法: 抽象方法
 *         > 只有方法的声明没有方法体
 *         > 如果类中有抽象方法 那么这个类必须也是抽象的(包含抽象方法的类一定是抽象类)
 *         > 若子类重写了父类中的所有的抽象方法后,方可实例化, 若子类没有重写父类中的抽象方法  则子类也是个抽象类 也需要abstract修饰

* abstract 不能用来修饰: 属性, 方法, 构造器等结构
* abstract 不能修饰: 私有方法 静态方法(加上static不认为是重写), final方法, final类
abstract class PP{
    int age;
    
    public  PP(){};
    
    public PP(int age){
        this.age = age;
    }
    
    public  abstract  void eat();  // 父类有抽象方法 子类必须重写这个方法
}


class Pson extends  PP{

    public  void  eat(){  // 重写父类的抽象方法

    }

}

思考题:

1: 为什么抽象类不可以被final声明:

因为抽象类是需要被继承的  如果被final声明就不可以被继承此类就是个无用类了

2: 一个抽象类可以定义构造器吗?

可以, 因为抽象类虽然不可以实例化 ,但是子类实例化的时候需要调用父类的构造器

3:

编写一个Employee类,声明为抽象类, 包含如下三个属性:name,id,salary。 提供必要的构造器和抽象方法:work()。 对于Manager类来说,他既是员工,还具有奖金(bonus)的属性。
请使用继承的思想,设计CommonEmployee类和Manager类,要求类 中提供必要的方法进行属性访问。
abstract class Empty{
    private  String name;
    private  int id;
    private double salary;
    public Empty(){};
    public  Empty(String name, int id, double salary){
        super();
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public abstract void work();  // 抽象方法必须要是无方法体的
}


class Mang extends  Empty{

    private  double bonus;
    public void work(){
        System.out.println("可以跑");
    }
}
结果

猜你喜欢

转载自www.cnblogs.com/zhaoyunlong/p/11683710.html