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:

    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    **************************
    我是儿子! 儿子去上学! 
    儿子要生活费! 
  • 相关阅读:
    企业项目开发--分布式缓存memcached(3)
    何时及为什么整理代码:现在,以后,从不
    【译文】程序员的两种类型
    国际化SEO优化的最佳实践
    动态代理的基本理解与基本使用
    Filter过滤器-JavaWeb三大组件之一
    java通过jdbc插入中文到mysql显示异常(问号或者乱码)
    BeanUtils封装对象时一直提示ClassNotFoundException:org.apache.commons.beanutils.BeanUtils
    MVC开发模式与javaEE三层架构
    JSP、EL表达式、JSTL
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/7565277.html
Copyright © 2011-2022 走看看