• java之 向上转型与向下转型


    向上转型


    class father {
    	public void eat(){
    		System.out.println("father eat()");
    	}
    }
    class son extends father {
    	public void sleep(){
    		System.out.println("son sleep()");
    	}
    	public void eat(){
    		System.out.println("son eat()");
    	}
    
    }
    
    public class test1 {
    	public static void main(String[] args) {
    	
    	father f = new son();//向上转型
    	f.eat();
    	//f.sleep()  f虽然也指向了son对象,但是向上转型的代价是会丢丢失与父类不同的方法
    	}
    
    }
    

     向上转型的好处

    这样使代码变得简洁。体现了JAVA的抽象编程思想

      

     


     向下转型


    class father {
        public void eat(){
            System.out.println("father eat()");
        }
    }
    class son extends father {
        public void sleep(){
            System.out.println("son sleep()");
        }
        public void eat(){
            System.out.println("son eat()");
        }
    
    }
    
    public class test1 {
        public static void main(String[] args) {
        
        father f = new son();//向上转型
        f.eat();
        //f.sleep()  f虽然也指向了son对象,但是向上转型的代价是会丢丢失与父类不同的方法
        son s = (son)f;//向下转型
        s.eat();
        s.sleep();
        /*
         * 这种方法运行的时候会报错
        father fa = new father();
        son so = (son)fa;
        so.eat();
        so.sleep();
        */
        }
    
    }

    Java为了解决不安全的向下转型问题,引入泛型的概念

    为了安全的类型转换,最好先用 if(A instanceof  B) 判断一下


     总结


    1、父类引用可以指向子类对象,子类引用不能指向父类对象。

    2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。

       如Father father = new Son();

    3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。

       如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father;

       其中father前面的(Son)必须添加,进行强制转换。

    4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效

    5、向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。

  • 相关阅读:
    《你的知识需要管理》——田志刚
    《谁动了我的奶酪》——[美]斯宾塞·约翰逊
    《程序员面试宝典(第三版)》——欧立奇 / 刘洋 / 段韬
    《天才在左疯子在右》——高铭
    LintCode: Combination Sum
    LintCode: Flatten Binary Tree to Linked List
    LintCode: First Position of Target
    LintCode: Delete Node in the Middle of Singly Linked List
    LintCode: Maximum Depth of Binary Tree
    pytorch visdom可视化工具学习—3-命令行操作使用经验
  • 原文地址:https://www.cnblogs.com/zero-vic/p/9917125.html
Copyright © 2020-2023  润新知