向下转型(父类到子类)java允许以上两种类型

两个重要的概念:1. 向上转型(子类到父类) 2. 向下转型(父类到子类)

Java允许以上两种类型,两种类型之间必须有继承关系。

什么是多态:多种形式(编译和运行是两种形式),多种状态。

超类型引用指向子类型对象(编译阶段静态绑定超类型方法,运行时动态绑定子类型对象方法)

java程序分为编译阶段和巡查阶段。

编译阶段:编译器检查语法时,会静态绑定(编译阶段没有新对象),即在父类中找到与子类同名的方法,进行静态绑定。已编译。

运行阶段:子类的对象实际上是在堆内存中创建的,所以在调用方法的时候,实际上是调用了子类的方法,这个过程属于运行阶段绑定。 (运行时绑定属于动态绑定)

****什么时候向下转换,当父类型的引用要访问子类型中唯一的方法时,此时必须向下转换。

class Animal{
    public void move(){
        System.out.println("animal is moving");
    }
}
class Cat extends Animal{

    public void move(){
        System.out.println("cat is catching the mouth");  //此处为方法覆盖
    }
    public void walk(){
        System.out.println("cat is walking");
    }
}

图片[1]-向下转型(父类到子类)java允许以上两种类型-唐朝资源网

class Bird extends Animal{ public void move(){ System.out.println("bird is flying"); //此处也是方法覆盖override 覆盖的是Animal中的move方法 } } public class DtTest{ public static void main(String[] args){ Animal cat = new Cat(); //此处就是动态绑定,即在编译阶段,声明一盒animal类型的变量cat,并不生成对象,因为在Animal中有move对象,所以可以编译通过 cat.move(); Animal bird = new Bird(); //在运行阶段,会在堆内存中生成cat对象,且在实际运行的时候 实际是调用cat类的(子类的)move方法。 bird.move();

图片[2]-向下转型(父类到子类)java允许以上两种类型-唐朝资源网

Animal cat1
= new Cat(); //cat1.walk(); //错误: 找不到符号 Cat x = (Cat)cat1; //此处就是强制类型转换,专业术语为向下转型,一般情况下,强制类型转化多称呼与基本数据类型的时候。 x.walk(); } }

© 版权声明
THE END
喜欢就支持一下吧
点赞45 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片