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";//这就是合法的了

  • 相关阅读:
    k8s之StatefulSet介绍(六)
    k8s之Deployment 声明式地升级应用(五)
    k8s 挂载卷介绍(四)
    k8s 之service资源介绍(三)
    k8s几种pod的控制器
    k8s 初识pod (二)
    k8s的常用命令(一)
    k8s 学习笔记
    aws centos系统磁盘扩容
    mac更改launchpad图标大小
  • 原文地址:https://www.cnblogs.com/micky1989/p/3021123.html
Copyright © 2011-2022 走看看