zoukankan      html  css  js  c++  java
  • 向上转型和向下转型

    向上和向下?

    向上转型和向下转型是在继承中出现的情形。

    通俗的理解,向上转型,将子类转成父类,向下转型,将父类转成子类,java中提供自动的向上转型

    向上转型时,如果父类含有f()方法,子类中不含有f()方法,此时,调用时将执行父类中的f()方法

    向上转型时,如果父类含有f()方法,子类中也含有f()方法,此时,调用时将执行子类中的f()方法

    向上转型时,如果子类含有f()方法,父类中不含有f()方法,此时,调用时将会出错

    class Father{
    
        Father() {
         //   System.out.println(static_data);
    //        System.out.println("调用父类的构造函数");
        }
        void f() {
            System.out.println("执行父类f()方法");
        }
    
    
    }
    
    class Son extends Father{
        Son() {
    //        System.out.println("调用子类的构造函数");
        }
        void f(){
            System.out.println("执行子类中的f()方法");
    
        }
    
        void g() {
            System.out.println("执行子类的g()方法");
    
        }
    
    }
    
    public class test2 {
        public static void main(String[] args) {
            Father son = new Son();
            son.f();
            //由于向上转型,只能调用父类中的方法
            //son.g();
    
    
    
        }
    }

    向下转型,可想而知是将父类型转为子类型,这样做是有一定风险的,向上转型可以看成一种窄化处理,而向下转型可以看成一种宽化处理,java中,一旦涉及宽化就可能出现问题。因此,一般不建议向下转型操作。向下转型会进行严格的检查,如在运行期间会对类型进行"运行时类型识别"RTTI。下面是一个例子:

    将上面程序中的

     Father son = new Son();
    改为:
    Son father = (Son)new Father();
    运行时会出现异常:

  • 相关阅读:
    k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-4
    k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2
    Mysql索引最佳实践笔记0524
    Mysql 5.6 编译报错
    MySQL 源码安装规范
    CentOS 7.3安装Zabbix3.2
    Mysql for Mac 安装及环境配置
    win10下Resin安装--入门(1)
    React---入门(1)
    SVN简介与安装
  • 原文地址:https://www.cnblogs.com/xuhan74520/p/13804345.html
Copyright © 2011-2022 走看看