java——向上转型

Java
328
0
0
2022-11-26

向上转型

背景代码:

class Animal{
    protected String name;

    //添加构造方法 
    public Animal(String name) {
        this.name = name;
        System.out.println("Animal(String)");
    }

    public void eat(){
        System.out.println(this.name + " Animal::eat()");
    }
}

class Cat extends Animal {
    public Cat(String name){
        super(name);//显式调用//写道第一行
        System.out.println("Cat(String)");
    }
}

class Bird extends Animal {
    public Bird(String name){
        super(name);
    }

    public void fly(){
        System.out.println("Bird::fly()");
    }
}

下面讨论的均在以上代码的基础上

向上转型:父类引用 引用子类对象

正常的创建变量方法:

    public static void main1(String[] args) {
        Animal animal = new Animal("doudou");
        Cat cat = new Cat("mimi");
    }

利用了向上转型之后:

1.直接赋值的方法

public static void main(String[] args) {
    Animal animal = new Cat("haha");//父类引用 引用子类对象
    animal.eat();
    Cat cat = new Cat("j");
    cat.eat();
}

2.方法传参的方法

public static void func(Animal animal){
    animal.eat();
}

public static void main(String[] args) {
    Cat cat = new Cat("mimi");
    func(cat);
}

3.返回值发生向上转型

public static Animal func(){
    return new Cat("mimi");
}

public static void main(String[] args) {
    Animal animal = func();
    animal.eat();
}