Bootstrap

面向对象进阶-抽象类

抽象方法

将共性行为(方法)抽取到父类,由于每个子类执行内容不一样,在父类不能确定具体的方法体,该方法可以定义为抽象方法。

抽象类:如果一个类中存在抽象方法,那么该  类必须声明为抽象类。

抽象方法定义格式:public abstract 返回值类型 方法名(参数列表);  不写方法体

抽象类定义格式: public abstract class 类名{}

注意事项

  • 抽象类不能实例化
  • 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 抽象类可以有构造方法(当创建子类对象时,给属性赋值用的)
  • 抽象类的子类:要么重写抽象类所有抽象方法,要么是抽象类(需要继续创建子类重写)。

案例

public abstract class Animal {
    private int age;
    private String name;

    public Animal() {
    }

    public Animal(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void eat();
    public void drink(){
        System.out.println("heshui");
    }
}
public class Dog extends Animal{
    public Dog() {
    }

    public Dog(int age, String color) {
        super(age, color);
    }


    @Override
    public void eat(){
        System.out.println("吃骨头");
    }
}
public class frog extends Animal{
    public frog() {
    }

    public frog(int age, String name) {
        super(age, name);
    }

    @Override
    public void eat() {
        System.out.println("吃虫子");
    }
}
public class sheep extends Animal{
    @Override
    public void eat() {
        System.out.println("chicao");
    }
}
public class Test {
    public static void main(String[] args) {
        frog f=new frog(1,"小绿");
        System.out.println(f.getAge()+f.getName());
        f.eat();
        f.drink();

    }

}

;