java - 接口(interface)和类对象内存分配的区别

标签 java oop memory-management interface jvm

假设有接口(interface)A和类B,类B实现了接口(interface);

interface A {
  void hello();
}

class B implements A {
  public int justAField;

  @Override
  public void hello() {
    System.out.println("Hi.");
  }

  public void anotherMethod() {
    System.out.println("Another one.");
  }
}
假设我们有这两个对象;
A typeInterface = new B();
B typeClass = new B();
我的问题是,当编译器编译代码和内存分配开始时,我们有两个对象对吗?但是一个是A类型,一个是B类型,这意味着'typeInterface'将只有一种方法,但'typeClass'将包含一个字段和一个方法。
这两个对象是否分配相同数量的内存或“typeInterface”基本上消耗更少的内存?

最佳答案

不,您有两个 B 类型的对象,一个存储在 A 类型的引用上,另一个存储在 B 类型的引用上。
两个对象共享相同的内存使用大小,但是您不能从类型 A 的引用(名为 typeInterface 的引用)访问 B 的方法,即使该方法存在于被引用的对象中,除非您强制转换它。如果你投了引用,那么限制就会被移除,你可以访问 anotherMethod .
您必须区分引用和对象。这就是你所需要的。

关于java - 接口(interface)和类对象内存分配的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66513389/

相关文章:

javascript - 真正的 JavaScript 关键字还是 Notepad++ 中的错误?

c++ - 管理事件 : pointer or instance? 的传播

java - JVM 创建 CSV 文件并即时压缩所需的内存

c# - 在 .net 中分配新数组的大 O 成本

c - 插入到c中的动态二维数组

java - Autowiring 字段上的 org.springframework.beans.factory.BeanCreationException

java - 从 JTable 单元格获取值

c++ - protected 继承与公共(public)继承和 OO 设计

java - 为什么jdk中的exe有2个bin?

java - Rest API SSL 带有 ca 签名的证书