【问题标题】:What exactly happens when we create an object of one class and refer it using another [duplicate]当我们创建一个类的对象并使用另一个类引用它时到底会发生什么[重复]
【发布时间】:2018-06-06 19:40:44
【问题描述】:
public class Test
{
  public static void main(String args[])
  {
    A a = new B(); // object of type B
  }
}

这里的对象是 B 类类型,但由 A 类类型的变量引用

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

这在内存中是如何准确表示的?究竟发生了什么?

【问题讨论】:

    标签: java oop object


    【解决方案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。

    至于它在内存中的样子。我有限的理解是编译器会关心类型安全的声明类,但运行时和内存只关心实例化类。

    【讨论】:

    • 是的!明白了...谢谢@Steve!
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 2019-12-09
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多