简体   繁体   中英

related to abstract class reference holding object of its derived class

class A is abstract and class B extends class A now class A reference can hold object of class B,that is

A aObj = new B();

and assume class B has some extra methods.... like

class A
{
public show();
}
class B extends A
{
public show(){}
public method1(){}
private method2(){}
}

now tell me what things variable aObj can access from class B can it access everything?

aObj only sees the public show() method. If you cast aObj to B, you can then access public method1() . public method2() is only accessible to the implementation of B.

For reference and completeness, here's a list of the possibilities:

A aObj = new B();
aObj.show(); // Works
aObj.method1(); // Error
aObj.method2(); // Error

And with casting to B:

B bObj = (B)aObj; bObj
bObj.show(); // Works
bObj.method1(); // Works
bObj.method2(); // Works inside bObj, but error otherwise

aObj can only use show() as the compiler thinks aObj is of type A, and the only known method of A is show().

If you know that you actually have a B you can cast that object to a 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(); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM