抽象类和抽象方法

 抽象方法:将共性方法抽取到父类之后,由于子类执行内容不同,所以在父类中不能确定具体方法,该方法定义为抽象方法。

抽象类:类中存在抽象方法的类声明为抽象类。


注:1,抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类;

2,抽象类不能创建对象;

3,抽象类可以有构造方法;(为什么不能创建对象还要构造方法?答:为创建子类对象时给共有属性赋值);

4,抽象类的子类:①要么是抽象类(依旧不可创建对象),②要么重写抽象类中的所有抽象方法。


青蛙frog  属性:姓名,年龄  方法:吃虫子,喝水

狗Dog  属性:姓名,年龄  方法:吃骨头,喝水

山羊Sheep 属性:姓名,年龄 方法:吃草,喝水

测试类:

public class Main {
    public static void main(String[] args){
        Dog d=new Dog("小灰灰",1);
        frog f=new frog("小小绿",1);
        Sheep s=new Sheep("喜羊羊",10);
        d.eat();
        d.drink();
        System.out.println("----------");
        f.eat();
        f.drink();
        System.out.println("----------");
        s.eat();
        s.drink();

    }
}

javabean类

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

    public Animal() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat();
    public void drink()
    {
        System.out.println(getName()+"喝水");
    }
}
public class frog extends Animal{
    public frog() {
    }

    public frog(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println(getName()+","+getAge()+"岁,吃虫子");
    }

}
public  class Dog extends Animal{
    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat(){
        System.out.println(getName()+","+getAge()+"岁,吃骨头");
    }

}
public class Sheep extends Animal{
    public Sheep() {
    }

    public Sheep(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat(){
        System.out.println(getName()+","+getAge()+"岁,吃草");
    }

}

运行结果:

c0e357a9cf24486f9e43b164d2632d64.png