zoukankan      html  css  js  c++  java
  • Java SE之向上转型与向下转型

    package object;
    
    //向上转型-向下转型
    public class Up_Down_convert {
        
        /* 向上转型
         * 
         * 1.上转型对象可以使用和操作子类继承或者重写的方法
         * 2.上转型丧失了对子类【新增成员】或者【新增方法】的操作和使用
         * */
        public void upConvert(){
            Father father_a = new Son();
            father_a.say();
            father_a.action();
        }
        
        /* 向下转型
         * 
         * 1.把指向子类对象的父类引用赋给子类引用,叫向下转型
         * 2.要强制转换
         * 3.向下转型后的实例可以重新获得因向上转型而失去的方法(子类独有的)
         * */
        public void downConvert(){
            Father father_a = new Son();//先向上转型(转至父亲类)
            father_a = (Son)father_a;//error:再向下(强制)转型
            father_a.say();
            father_a.action();
    //        father_a.getMoney();//此方法(子类独有)无法使用
            
            System.out.print("**************************
    ");
            
            Father father_b = new Son();//先向上转型(转至父亲类)
            Son son = (Son)father_b; //right:另外新声明一个儿子对象,再向下转型实例化
            son.say();
            son.action();
            son.getMoney();//上转型后,此方法仍(子类独有)可以【继续恢复使用】
        }
        public static void main(String args[]){
            new Up_Down_convert().upConvert();//向上转型
            //output:我是儿子! 儿子去上学! 
            
            System.out.print("**************************
    ");
            new Up_Down_convert().downConvert();//向下转型
        }
    
    }
    
    class Father{
        public void say(){
            System.out.print("我是父亲! ");
        }
        public void action(){
            System.out.println("父亲去上班! ");
        }
    }
    
    class Son extends Father{
        public void say(){
            System.out.print("我是儿子! ");
        }
        public void action(){
            System.out.println("儿子去上学! ");
        }
        
        public void getMoney(){
            System.out.print("儿子要生活费! ");
        }
    }

     output:

    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    儿子要生活费! 
  • 相关阅读:
    Openstack 通过 SQLAlchemy-ORM 访问数据库
    ulimit -c unlimited
    ajax 调用后台接口示例
    读书有什么用——北漂18年(番外篇三)
    zTree点击文字勾选复选框
    深度剖析 | 基于大数据架构的BI应用
    深度剖析 | 基于大数据架构的BI应用
    AngularJS之对话框
    AngularJS之依赖注入(实例一)
    AngularJS之$watch方法(监控动作)
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7565277.html
Copyright © 2011-2022 走看看