我可以通过基类类型引用访问子类方法吗?

下面是我正在尝试处理但无法解决问题的代码:“我能否真正在Java中执行以下操作。如果是,请帮助了解我”如何“,如果没有”为什么?“”。 ..看看下面的代码……

class Base{ public void func(){ System.out.println("In Base Class func method !!"); }; } class Derived extends Base{ public void func(){ // Method Overriding System.out.println("In Derived Class func method"); } public void func2(){ // How to access this by Base class reference System.out.println("In Derived Class func2 method"); } } class InheritDemo{ public static void main(String [] args){ Base B= new Derived(); B.func2(); // <--- Can I access this ??? This is the issue... } } 

提前致谢!!!! 等待一些有用的答案:) …

简短又甜蜜? 不,你不能.. Base如何知道扩展类中存在哪些函数/方法?

编辑:

通过explict / type cast,这可以实现,因为编译器在将对象BaseDerived时知道你在做什么:

 if (B instanceof Derived) {//make sure it is an instance of the child class before casting ((Derived) B).func2(); } 

这甚至不会编译,因为B不知道func2

你可以做

 ((Derived) B).func2(); 

你做不到

 B.func2(); 

因为func2不是Base类的方法。

由于对象B的类型是Base,而Base类型的公共接口中没有func2(),因此您的代码不会编译。

您可以将B定义为Derived或将B对象强制转换为Derived:

  Derived B = new Derived(); B.func2(); //or Base B = new Derived(); ((Derived)B).func2(); 

喜欢这个:

 ((Derived) B).func2();