当我们创建一个类的对象并使用另一个类引用它时,到底发生了什么

时间:2018-06-06 19:40:45

标签: java oop object

public class Test
{
  public static void main(String args[])
  {
    A a = new B(); // object of type B
  }
}

此处对象属于Class B类型,但由Class A

类型的变量引用

执行A a = new A()A a = new B()只允许我访问A类的成员和方法,那么为什么我要用B类的构造函数实例化变量a?

这在内存中的确切表现如何以及究竟发生了什么?

1 个答案:

答案 0 :(得分:-1)

将变量声明为祖先类型允许您动态切换实现。例如......

public static void main(String[] args) {

    List<String> stringList;

    stringList = new ArrayList<>();

    // Stuff Happens and now I need a LinkedList...

    stringList = new LinkedList<>();
}

如果我从一开始就将stringList声明为ArrayList,我就无法将其切换为使用LinkedList。

至于它在内存中的表现。我有限的理解是编译器会关注TypeSafety的声明类,但运行时和内存只关心实例化类。