A类是抽象的,B类是A类 现在,类A引用可以保存B类的对象,即
A aObj = new B();
并假设B类有一些额外的方法.... 像
class A
{
public show();
}
class B extends A
{
public show(){}
public method1(){}
private method2(){}
}
现在告诉我变量aObj可以从B类访问的内容 可以访问所有内容吗?
答案 0 :(得分:3)
aObj只能看到public show()
方法。如果将aObj强制转换为B,则可以访问public method1()
。 public method2()
仅可用于实施B.
答案 1 :(得分:3)
为了参考和完整性,这里列出了可能性:
A aObj = new B();
aObj.show(); // Works
aObj.method1(); // Error
aObj.method2(); // Error
投射到B:
B bObj = (B)aObj; bObj
bObj.show(); // Works
bObj.method1(); // Works
bObj.method2(); // Works inside bObj, but error otherwise
答案 2 :(得分:2)
aObj只能使用show(),因为编译器认为aObj是A类型,A的唯一已知方法是show()。
如果您知道自己确实有B,则可以将该对象投射到B:
if (aObj instanceof B.class) {
B bObj = (B) aObj;
bObj.method1(); //OK
} else {
log.debug("This is an A, but not a B");
}
aObj.show();