栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中向上转型和向下转型的理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中向上转型和向下转型的理解

父子对象之间的转换分为了向上转型和向下转型,它们区别如下:

向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换

示例:Animal动物类代码解释如下:

package com.wjledu.poly_.detail_;

public class Animal {
    String name = "动物";
    int age = 10;
    public void sleep() {
        System.out.println("睡");
    }
    public void run() {
        System.out.println("跑");
    }
    public void eat() {
        System.out.println("吃");
    }
    public void show() {
        System.out.println("hello,您好");
    }
}

示例:Cat类继承Animal代码如下:

package com.wjledu.poly_.detail_;

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

示例:Dog类继承Animal代码如下:

package com.wjledu.poly_.detail_;

public class Dog extends Animal{//Dog是Animal的子类
    
}

示例:PolyDetail实现两个对象类存在继承关系代码与注解如下:

package com.wjledu.poly_.detail_;

public class PolyDetail {
    public static void main(String[] args) {
        //多态的向上转型:父类的引用指向了子类的对象
        //语法:父类类型引用名 = new 子类父类();
        Animal animal = new Cat();
        Object obj = new Cat();//可以,因为Object 也是 Cat的父类

        //向上转型调用方法分规则如下:
        //(1) 可以调用父类所有的成员方法(需遵守访问权限)
        //(2) 但是不能调用子类的特有的成员。不能调用的原因如下:
        //(3) 因为在编译阶段,能调用哪些成员,是由编译类型来决定的
        //animal.catchMouse();//错误
        //(4) 最终运行结果看子类的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法,
        //然后调用,规则和前面讲的方法调用规则一致。

        System.out.println("===========向上转型============");
        animal.eat(); //猫吃鱼
        animal.run(); //跑
        animal.show();//hello,您好
        animal.sleep();//睡


        //向上转型的总结:子类重写了父类方法,调用子类,没有重写掉
       //只要理解编译和运行这两个规则就不会绕晕了。

        //希望可以调用Cat的 catchMouse()方法
        //多态的向下转型
        //(1) 语法: 子类类型 引用名 = (子类类型)父类引用;
        //问题?cat的编译类型Cat,运行类型是Cat
        System.out.println("===========向下转型============");
        Cat cat = (Cat) animal;
        cat.catchMouse();//猫抓老鼠
        //(2)要求父类的引用必须指向的是当前目标类型的对象
        Dog dog = (Dog) animal;//不可以
        //只有编译类型和运行类型不一致才需要向下转型


        System.out.println("ok~~~");

    }
}

最终结果实现如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号