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

JAVA向下转型的错误示例和正确示例

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

JAVA向下转型的错误示例和正确示例

多态的向上向下转型都是针对于编译时类型,运行时的类型从始至终都不会改变,即在new的时候创建是哪个类型的对象就是哪个类型的对象。
向上转型导致“向父类转型的子类对象调用子类特有方法”即使运行时无错也无法通过编译,若想调用子类特有方法应该解决此编译出错问题。

  • 解决方法:向下转型。将经历过向上转型的子类对象再强制“转回来”。
  •               转回来意思是,不能转成除本子类以外的其他类。如果转成除本子类以外的其他类,编译不报错但运行时会出现ClassCastException
    
package poly;


public class DownCast {
    public static void main(String[] args) {
        
        Person3 per1 = new Person3();
//        Chinese3 chi1 = (Chinese3) per1;	//编译不报错但运行时会出现ClassCastException
//        chi1.uniqueMethod();
        
        System.out.println(per1 instanceof Chinese3);
        if (per1 instanceof Chinese3) {
            Chinese3 chi1 = (Chinese3) per1;
            chi1.uniqueMethod();
        }

        
        Person3 per4 = new Chinese3();
//        Janpan3 jan2 = (Janpan3) per4;	//编译不报错但运行时会出现ClassCastException
//        jan2.uniqueMethod();
        
        System.out.println(per4 instanceof Janpan3);
        if (per4 instanceof Janpan3) {
            Janpan3 jan2 = (Janpan3) per4;
            jan2.uniqueMethod();
        }

        
        Person3 per2 = new Chinese3();
//        Chinese3 chi2 = (Chinese3) per2;	//正确使用,编译和运行都不报错
//        chi2.uniqueMethod();
        System.out.println(per2 instanceof Chinese3);
        if (per2 instanceof Chinese3) {
            Chinese3 chi2 = (Chinese3) per2;
            chi2.uniqueMethod();
        }
    }
}

class Person3 {
    public void eat() {
        System.out.println("人吃饭");
    }
}

class Chinese3 extends Person3 {
    @Override
    public void eat() {
        System.out.println("中国人吃饭");
    }

    public void uniqueMethod() {
        System.out.println("中国人特有方法");
    }
}

class Janpan3 extends Person3 {
    @Override
    public void eat() {
        System.out.println("日本人吃饭");
    }

    public void uniqueMethod() {
        System.out.println("日本人特有方法");
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/583867.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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