Java 我们可以从抽象类调用派生类中的super.someMethod()吗?
我们可以在从抽象类派生的类中调用Java 我们可以从抽象类调用派生类中的super.someMethod()吗?,java,inheritance,abstract-class,Java,Inheritance,Abstract Class,我们可以在从抽象类派生的类中调用super.someMethod() 对于站姿: abstarct class TestBase{ void nonabstractMethod(){ .... } } 然后派生类: class Child extend TestBase{ void callFunction(){ } void nonabstractMethos(){ super.nonabstractMethos(); } } 我想这是可以做到
super.someMethod()
对于站姿:
abstarct class TestBase{
void nonabstractMethod(){
....
}
}
然后派生类:
class Child extend TestBase{
void callFunction(){
}
void nonabstractMethos(){
super.nonabstractMethos();
}
}
我想这是可以做到的。但是如果我们有一个抽象方法,那么它就不能被调用,因为没有实现,对吗?简短的回答是:是的
您始终可以调用
public
或protected
超级方法。与java中的任何(实例)方法一样,它将被polimorphic处理,并将调用一个具体的实现,无论是超级类还是派生类(如果它重写它)。是的,您是正确的。如果要扩展具有抽象方法的抽象类,则不能调用super.thatMethod();
考虑下面的例子
public class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
super.doRSA(); //Works fine
}
}
这将起作用,因为可以从MyService
访问doRSA()。与public
相同,但不适用于private
但是
现在考虑这个例子,您可以从子类
调用Suff.SuxCub方法()。public abstract class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
}
@Override
protected void doRSA() {
super.doRSA();
}
}
因此,如果要重写一个超类方法,可以使用
super
调用该方法。考虑这个链接可以更清楚地说明 如果两个类都在同一个包中,您的示例将起作用。
如果情况并非如此,则应将该方法声明为受保护或公共,例如:
abstract class TestBase{
protected void nonabstractMethod(){
....
}
}
如果方法是抽象的,则不能调用它,例如:
abstract protected void abstractMethod();
试试看,你就会看到结果。在他的例子中,抽象方法没有受到保护,所以。。只有当两个类都在同一个包中时,它才会起作用Hank you@shikjohari提供了解释良好的示例。谢谢Caelos给出的答案。谢谢Mureinik给出的答案。
abstract protected void abstractMethod();