• 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:

    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    儿子要生活费! 
  • 相关阅读:
    编写属于自己的Linux Service命令
    Cloudera Manager和CDH4.1的安装
    html5基础教程收集整理精华
    Javascript跳转页面和打开新窗口等方法
    VK值列表
    标准C++之fstream
    PeekMessage用法
    Web系统常用测试方法
    VC控件的一些原理
    Visual C++ 文件操作
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7565277.html
Copyright © 2020-2023  润新知