多态的向上转型

1)本质:父类的引用指向了子类的对象

2)语法:父类类型   引用名= new 子类类型();

3)特点:编译类型看左边,运行类型看右边。

                可以调用父类中的所有成员;

                最终运行效果看子类的具体实现 !即调用方法时,按照从子类开始查找方法

                ,然后调用规则跟前面讲得方法通用规则一致

class Animal{
    String name ="动物";
    int age = 10;
    public void sleep(){
        System.out.println("睡");
    }
    public void run(){
        ystem.out.println("跑")
    }
    public void eat(){
        ystem.out.println("吃")
    }
    public void show(){
        ystem.out.println("hello 你好");
    }
}
class Cat extends Animal{
    pubilc void eat(){
        System.out.println("猫吃鱼");
    }
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }

}

 多态的向下转型 ;

1)语法 子类类型                 引用名 =(子类类型) 父类引用;

2)只能强转父类的引用,不能强转父类的对象

3)要求父类的引用类型必须指向的是当前目标类型的对象

4)当向下转型后,就可以调用子类类型中所有的成员

Demo类

public class Demo{
    Animal animal = new Cat();
    Objext obj = new Cat();

    //多态的向下转型
    // (1) 语法:子类类型 引用名 = (子类类型) 父类引用;
    Cat cat = (Cat) animal;     // cat的编译类型和运行类型都是Cat
    cat.catchMouse();

    // (2) 要求父类的引用必须指向的是当前目标类型的对象
    // Dog dog = (Dog) animal;    
    //上述一行代码会报错,因为 animal 本身是 Cat 对象,Cat 不能转换为 Dog

}

Cat类

public class Cat extends Animal {
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public void catchMouse(){  //Cat特有的方法
        System.out.println("猫抓老鼠");
    }
}

Dog类

public class Dog extends Animal{

}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐