背景代码:
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();
}