A类是抽象的类B扩展类A 现在类的引用可以保持类B的对象,即有关其派生类的抽象类参考保持对象
A aObj = new B();
和假设类B具有一些额外的方法.... 像
class A
{
public show();
}
class B extends A
{
public show(){}
public method1(){}
private method2(){}
}
现在告诉我什么东西变aObj可以从B类 访问它可以访问一切吗?
A类是抽象的类B扩展类A 现在类的引用可以保持类B的对象,即有关其派生类的抽象类参考保持对象
A aObj = new B();
和假设类B具有一些额外的方法.... 像
class A
{
public show();
}
class B extends A
{
public show(){}
public method1(){}
private method2(){}
}
现在告诉我什么东西变aObj可以从B类 访问它可以访问一切吗?
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();
aObj只看到public show()
方法。如果您将aObj投射到B,则可以访问public method1()
。 public method2()
仅仅是B.
参考,完整的执行访问,这里的可能性列表:
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
你的意思是公共无效秀()和抽象类A :) – extraneon
“现在告诉我”。有点粗鲁。这是功课还是这样? – BalusC