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

时间:2012-08-15 18:50:44

标签: java inheritance

以下是我正在尝试处理但无法解决问题的代码:“我能否真正在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...
      }
}

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

5 个答案:

答案 0 :(得分:4)

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

编辑:

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

你可以做到

((Derived) B).func2(); 

你做不到

B.func2(); 

因为func2不是Base类的方法。

答案 4 :(得分:0)

像这样:

((Derived) B).func2();