我们可以在抽象 class 的派生 class 中调用 super.someMethod() 吗?
Could we call super.someMethod() in derived class from an abstract class?
我们可以从抽象 class 派生 class 中调用 super.someMethod()
吗?
例如:
abstarct class TestBase{
void nonabstractMethod(){
....
}
}
然后导出class:
class Child extend TestBase{
void callFunction(){
}
void nonabstractMethos(){
super.nonabstractMethos();
}
}
我想这是可以做到的。但是,如果我们有一个抽象方法,那么由于没有实现而无法调用它,对吗?
简短的回答:是的。
您始终可以调用 public
或 protected
超级方法。与 java 中的任何(实例)方法一样,它将被多态处理,并且将调用具体实现,无论是超类的 class 还是派生的 class 如果它覆盖它。
是的,你是对的。如果您要扩展具有抽象方法的抽象 class,则不能调用 super.thatMethod();
考虑以下示例
public class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
super.doRSA(); //Works fine
}
}
这将起作用,因为可以从 MyService
访问 doRSA()。 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() {
}
}
现在考虑这种情况,您可以从子class
中调用 super.superClassMethod()
public abstract class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
}
@Override
protected void doRSA() {
super.doRSA();
}
}
因此,如果您要覆盖超级 class 方法,您可以使用 super
调用该方法。请考虑此 Java Specification link 以获得更多说明
如果 类 在同一个包中,您的示例将有效。
如果不是这种情况,那么您应该声明该方法受保护或 public,例如:
abstract class TestBase{
protected void nonabstractMethod(){
....
}
}
如果你的方法是抽象的,那么你就不能调用它,例如:
abstract protected void abstractMethod();
我们可以从抽象 class 派生 class 中调用 super.someMethod()
吗?
例如:
abstarct class TestBase{
void nonabstractMethod(){
....
}
}
然后导出class:
class Child extend TestBase{
void callFunction(){
}
void nonabstractMethos(){
super.nonabstractMethos();
}
}
我想这是可以做到的。但是,如果我们有一个抽象方法,那么由于没有实现而无法调用它,对吗?
简短的回答:是的。
您始终可以调用 public
或 protected
超级方法。与 java 中的任何(实例)方法一样,它将被多态处理,并且将调用具体实现,无论是超类的 class 还是派生的 class 如果它覆盖它。
是的,你是对的。如果您要扩展具有抽象方法的抽象 class,则不能调用 super.thatMethod(); 考虑以下示例
public class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
super.doRSA(); //Works fine
}
}
这将起作用,因为可以从 MyService
访问 doRSA()。 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() {
}
}
现在考虑这种情况,您可以从子class
中调用 super.superClassMethod()public abstract class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
}
@Override
protected void doRSA() {
super.doRSA();
}
}
因此,如果您要覆盖超级 class 方法,您可以使用 super
调用该方法。请考虑此 Java Specification link 以获得更多说明
如果 类 在同一个包中,您的示例将有效。
如果不是这种情况,那么您应该声明该方法受保护或 public,例如:
abstract class TestBase{
protected void nonabstractMethod(){
....
}
}
如果你的方法是抽象的,那么你就不能调用它,例如:
abstract protected void abstractMethod();