Java 继承和多态

新建一个父类

public class Animal {

    private String name;
    private String color;

    public Animal() {
        super();
    }

    public Animal(String name, String color) {
        super();
        this.name = name;
        this.color = color;
    }



    public void eat () {
        System.out.println("吃东西...");
    }

    public String getName() {
        return name;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

}

建一个 子类 Dog

//extends   继承
//Dog   子类  Animal  父类
//子类继承父类后自动拥有父类的 public和protected的 属性和方法
//把多个子类中重复的代码提取到父类中可以减少代码量
//父类的 构造方法 无法继承给子类
public class Dog extends Animal {

    //子类可以添加自己的属性和和方法
    private int age;

    //子类构造方法 必须使用 super 调用父类的构造方法
    public Dog() {
        super();
    }

    public Dog(String name, String color) {
        //super调用父类的属性和方法
        //this 调用当前类的属性和方法
        super(name, color);
    }

    public Dog(String name, String color,int age) {

        super(name, color);//把name 和 color 赋值给父类的属性
        this.age = age;//把age 赋值给当前类的属性
    }



    //子类可以重写父类的方法,对父类提供的功能做出不同的表现
    @Override//子类重写父类必须加@Override 标识做出说明
    public void eat () {
        System.out.println("啃骨头...");
    }

    public int getAge() {
        return age;
    }

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

}

建立一个人的类

public class Person {

    private Animal animal;//人养宠物

    public Animal getAnimal() {
        return animal;
    }

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }



}

建立一个可执行main方法类


public class Application {

    public static void main(String[] args) {

        //Animal animal = new Animal("老板","灰白");

        Dog dog = new Dog("总裁","黑白");
//      dog.setName("总裁");
//      dog.setColor("黑白色");
        dog.setAge(2);
        dog.eat();

        Cat cat = new Cat("妙妙","黑白","折耳猫");

        Person person = new Person();

        //多态
        //使用父类类型(Animal)表示一系列的子类类型(Dog,Cat...)
        //可以把子类对象(dog)赋值给父类变量(animal)
        //实际调用的方法是子类的方法

        //好处:
        //1、对于同一个方法(eat)随着传入的子类对象不同,可以做出不同的响应
        //2、让程序具有良好的的扩展性
        //     例如:不需要修改person 即可喂养更多的宠物

        //条件:
        //1、存在继承关系(Dog.Cat都继承自Animal)
        //2、存在父类类型表示一组子类类型(private Animal animal)
        //3、子类对象赋值给父类类型变量(person.setAnimal(dog))
        //4、子类重写父类的方法


        person.setAnimal(dog);
        person.getAnimal().eat();

        person.setAnimal(cat);
        person.getAnimal().eat();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值