我们能否从抽象类的派生类中调用super.someMethod()?
我们可以从抽象类中派生类中调用super.someMethod()
吗?我们能否从抽象类的派生类中调用super.someMethod()?
在立场:
abstarct class TestBase{
void nonabstractMethod(){
....
}
}
然后派生类:
class Child extend TestBase{
void callFunction(){
}
void nonabstractMethos(){
super.nonabstractMethos();
}
}
我认为这是可以做到。但是如果我们有一个抽象方法,那么它就不能被调用,因为没有实现,我是否正确?
是的你是对的。如果你正在扩展一个具有抽象方法的抽象类,你不能调用super.thatMethod(); 考虑下面的例子
public class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
super.doRSA(); //Works fine
}
}
这将工作作为doRSA()是从MyService
访问。同为public
而不是private
但
public abstract class RSAService {
protected abstract void doRSA();
}
class MyServe extends RSAService{
public void myService(){
super.doRSA(); //This won't work
}
@Override
protected void doRSA() {
}
}
现在考虑这种情况下,在那里你可以从你的子类
public abstract class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
}
@Override
protected void doRSA() {
super.doRSA();
}
}
所以,如果你来推翻调用super.superClassMethod()超类方法可以使用super
来调用方法。考虑这个Java Specification的链接以获得更多的说明
在他的例子中,抽象方法不受保护,所以..只有当两个类都在同一个包中时,它才会起作用。 – 2015-02-06 09:40:14
谢谢@shikjohari的例子。 – diplomaticguru 2015-02-06 09:40:17
简短回答:是的。
您可以随时拨打public
或protected
超级方法。和java中的任何(实例)方法一样,它将被处理为polymorphicly,并且一个具体的实现将被调用,无论是super类还是派生类,如果它重写的话。
谢谢穆里尼克的回答。 – diplomaticguru 2015-02-06 09:43:54
如果两个类都在同一个包中,您的示例将可用。
如果不是的话,那么你应该申报法保护的或公共的,是这样的:
abstract class TestBase{
protected void nonabstractMethod(){
....
}
}
如果你的方法是抽象的,那么你就不能调用它,例如:
abstract protected void abstractMethod();
谢谢Caelos的回答。 – diplomaticguru 2015-02-06 09:43:33
尝试一下,你会看到结果。 – 2015-02-06 09:38:02