• Java学习笔记二十六:Java多态中的引用类型转换


    Java多态中的引用类型转换

     

     

    引用类型转换;

    1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换;

    2.向下类型转换(强制类型转换),是大类型到小类型的转换;

    3.instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题;

      向上类型转换是没有风险的,可以类比为一个杯子里的水倒入一个壶里(当然这个壶肯定容量比杯子要大),但是向下类型转换是有风险的,这就相当于一壶水向杯子里倒,肯定会有溢出。

    举一个例子;

    Initail.java:

    package com.test;
    
    public class Initail {
    
        public static void main(String[]args){
        
             Dog dog = new Dog();//先用子类的引用指向这个对象
             Animal animal = dog;//自动类型提升 向上类型转换
             Dog dog2 = (Dog)animal;//向下类型转换 强制类型转换但是存在风险
             Cat cat =(Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行
        }
    }

    运行失败:

    修改后的Initial.java:

    package com.test;
    
    public class Initail {
    
        public static void main(String[]args){
        
             Dog dog = new Dog();//先用子类的引用指向这个对象
             Animal animal = dog;//自动类型提升 向上类型转换
             if(animal instanceof Dog){
             }else{
                 System.out.println("无法进行类型转换 转换Dog类型");
             }
             if(animal instanceof Cat){
                 Cat cat = (Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行
             }else{
                 System.out.println("无法进行类型转换 转换为Cat类型");
             }
        }
    }

    Cat.java:

    package com.test;
    
    public class Cat extends Animal{
    }

    Dog.java:

    package com.test;
    
    //Dog对象继承于Animal类
    public class Dog extends Animal{
        public int age = 20;
        
        public void method(){
            eat();
        }
    
    }

    运行结果为:

  • 相关阅读:
    <JZOJ5912>VanUSee
    <JZOJ5910>duliu
    <JZOJ5913>林下风气
    pytest学习笔记(二)
    试用saucelabs进行浏览器兼容性测试
    pytest学习笔记(一)
    SSM框架搭建,以及mybatis学习
    游戏2048的python实现
    使用svn在github上下载文件夹
    jenkins集成python的单元测试
  • 原文地址:https://www.cnblogs.com/pureqh/p/9170458.html
Copyright © 2020-2023  润新知