zoukankan      html  css  js  c++  java
  • 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();
        }
    
    }

    运行结果为:

  • 相关阅读:
    基于modelforms组件实现注册功能
    Django中间件添加白名单
    微信公众号推广工具
    Mysql数据库密码忘记的解决办法
    Redis 高可用及分片集群,说了你也不懂
    SQLAlchemyの增删改查
    metaclass 了解一下
    伊戈尔·赛索耶夫的旗帜
    一些容易搞混的问题
    林纳斯·托瓦兹的旗帜
  • 原文地址:https://www.cnblogs.com/pureqh/p/9170458.html
Copyright © 2011-2022 走看看