与派生类的抽象类引用持有对象有关

时间:2009-12-20 14:19:11

标签: java

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类访问的内容 可以访问所有内容吗?

3 个答案:

答案 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();