Java 我可以通过基类类型的引用访问子类方法吗?
下面是一段代码,我正在努力工作,但无法解决这个问题:我真的可以用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
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那样被删除;