接口和类对象内存分配的区别
假设有A接口和B类,B类实现了接口;
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.
您必须区分引用和对象。这就是你所需要的。