• 49 向上造型与向下造型


    向上造型(转型)

    定义:超类的引用指向子类对象。

    例如:

    Animal o1 = new Tiger();//Tiger是Animal的派生类(子类)
    

      以上即为向上转型。

    特性:

    • 向上转型后的引用只能使用超类中的方法和属性。
    • 向上转型后的引用不能使用派生类中自有的方法和属性,可以使用重写父类的方法

    向下造型(转型)

    将一个已经向上转型的引用强制向下转型,并用一个新的派生类引用接收。

    注意:

    • 向下转型后的引用既可以使用超类中的也可以使用它自己的类(当前派生类)中的方法和属性。
    • 向下转型后需要使用一个派生类引用来接收。

    以上面的代码为前提,向下转型:

    Tiger o2 = null;//先声明一个需要向下转型为的派生类的引用
    	if(o1 instanceof Tiger) {//判断当前引用是否指向该派生类的对象
    		o2 = (Tiger)o1;//向下转型
    		//o1 = (Tiger)o1;//这样是无法转型成功的,转型不会报错,但o1任然无法调用Tiger中的属性和方法
    		}
    

      

    案例完整代码

    Tiger类向上转型Animal,之后再向下转型Tiger.

    package OOday03;
    /**
     * 向上转型
     * @author TEDU
     * Animal a1 = new Tiger();
     * 超类的引用a1指向派生类对象new Tiger() 这个就是向上转型
     * a1只能使用超类中的方法,不能使用Tiger中的方法
     */
    public class UploadDemo {
    	public static void main(String[] args) {
    		//向上造型
    		System.out.println("--------向上造型------------");
    		Animal o1 = new Tiger();
    		System.out.println(o1.str1);//向上造型后的o1只能使用超类中的属性
    		o1.sayHi();//和方法
    		//向下转型
    		System.out.println("--------向下造型-----------------");
    		Tiger o2 = null;
    		if(o1 instanceof Tiger) {
    			o2 = (Tiger)o1;
    			//o1 = (Tiger)o1;//这样是无法转型成功的,转型不会报错,但o1任然无法调用Tiger中的属性和方法
    			//转型后就可以使用派生类的方法了
    			System.out.println(o2.str1);//超类中的属性
    			o2.sayHi();//超类中的方法
    			System.out.println(o2.str2);//派生类中的属性
    			o2.sayHello();
    		}
    		
    	}
    }
    class Animal{
    	String str1 = "超类中的属性";
    	public void sayHi() {
    		System.out.println("超类中的方法");
    	}
    }
    
    class Tiger extends Animal{
    	String str2 = "派生类中的属性";
    	public void sayHello() {
    		System.out.println("派生类中的方法");
    	}
    }
    

      

    运行结果:

    --------向上造型------------
    超类中的属性
    超类中的方法
    --------向下造型-----------------
    超类中的属性
    超类中的方法
    派生类中的属性
    派生类中的方法
    

      

  • 相关阅读:
    [OpenWRT]判断WDS是否开启
    【cocos2d-js官方文档】一、搭建 Cocos2d-JS 开发环境
    noi Big String 超级字符串
    序列 xulie (2017青岛)
    %%%城市交通费 city //程序超时
    3.密码pasuwado————记第一次超越Candy?
    图论-欧拉回路(邻接链表)
    blue and red ball
    魔方→︿←
    The first DP!
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12022543.html
Copyright © 2020-2023  润新知