zoukankan      html  css  js  c++  java
  • 多态与类型的一点理解

    在JAVA中,一个对象只能有一种类型,比如:Employee e = new Employee(),e是Employee类(也相当于一种自定义的类型)的一个对象。但是,一个变量却可以指向不同类型的对象,那么可以说变量时具有多态性的。对于一个类的继承:

    public class Employee{

      String name;

      int salary;

      public String getDetails(){

      }

    }

    public class Manager extends Employee{

      String department;

      public String getDetails(){

      }

    }

    如下对对象的声明我们可以理解:

    Employee e = new Employee();

    Manager m = new Manager();

    e是Employee的一个对象,m是Manager的一个对象。但是,如果是这样定义又该如何理解呢:Employee m = new Manager()。

    此时m作为Employee的一个对象,而不是Manager的对象,因此这样的引用时不允许的:

    m.department = "Finance";//非法,编译时就会报错

    可能有些人不太理解,为什么明明是new了一个Manager,为什么m却不能访问Manager的属性变量。原因是在编译阶段,变量m是Employee的类型,编译器并不管运行时m指向的具体对象是Employee的对象还是Manager的对象,它只能访问Employee里面定义的变量和方法。也就是说,编译时看数据类型。

    那么如果要访问Manager里面的属性变量department,可以进行强制类型转换,把它还原成Manager类型,方法如下:

    Employee m = new Manager();

    Manager n = (Manager)m;

    n.department = "Finance";//这就是合法的了

  • 相关阅读:
    Oracle
    JSON字符串转换为JSON对象
    dynamic 动态获取object数据
    Kylin 技术架构(三)
    Kylin 工作原理(二)
    Kylin 简介(一)
    数仓建模之聚集型事实表设计案例
    数仓建模之累计快照事实表设计案例
    数仓建模之周期快照事实表设计案例
    数仓建模之事务事实表设计案例
  • 原文地址:https://www.cnblogs.com/micky1989/p/3021123.html
Copyright © 2011-2022 走看看