假设有接口(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/