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

Java 我可以通过基类类型的引用访问子类方法吗?,java,inheritance,Java,Inheritance,下面是一段代码,我正在努力工作,但无法解决这个问题:我真的可以用Java完成下面的工作吗。。如果是,请帮助我了解如何,如果不是,为什么。。。看看下面的代码 class Base{ public void func(){ System.out.println("In Base Class func method !!"); }; } class Derived extends Base{ public void

下面是一段代码,我正在努力工作,但无法解决这个问题:我真的可以用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...
      }
}

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

这甚至不会编译,因为B不知道函数2

这甚至不会编译,因为B不知道函数2

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

编辑:

通过显式/类型转换,可以实现这一点,因为编译器认为您知道将对象库转换为派生对象时正在执行的操作:


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

编辑:

通过显式/类型转换,可以实现这一点,因为编译器认为您知道将对象库转换为派生对象时正在执行的操作:

你能行

((Derived) B).func2(); 
你做不到

B.func2(); 
因为func2不是基类的方法。

您可以这样做

((Derived) B).func2(); 
你做不到

B.func2(); 

因为func2不是基类的方法。

因为对象B的类型是Base,并且基类的公共接口中没有func2,所以代码不会编译

可以将B定义为派生对象,也可以将B对象强制转换为派生对象:

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

由于对象B的类型是Base,并且Base类型的公共接口中没有func2,因此您的代码将无法编译

可以将B定义为派生对象,也可以将B对象强制转换为派生对象:

   Derived B = new Derived(); B.func2();
   //or
   Base B = new Derived(); ((Derived)B).func2();
像这样:

((Derived) B).func2();
像这样:

((Derived) B).func2();

如果您认为必须这样做,则需要重新访问您的设计。如果您认为必须这样做,则需要重新访问您的设计。感谢您的回复。。但这正是我想问的。。我能让B知道吗??我可以使用C++中的指针,但如何在java中使用??基类不知道特定于派生的方法。只能通过类型转换来访问派生类方法,以像派生的B.FUN2那样被删除;谢谢你的回复。。但这正是我想问的。。我能让B知道吗??我可以使用C++中的指针,但如何在java中使用??基类不知道特定于派生的方法。只能通过类型转换来访问派生类方法,以像派生的B.FUN2那样被删除;