Можем ли мы назвать 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() {
}
}
Теперь рассмотрим этот случай, где вы можете вызвать super.superClassMethod() из вашего подкласса
public abstract class RSAService {
protected void doRSA(){}
}
class MyService extends RSAService{
public void myService(){
}
@Override
protected void doRSA() {
super.doRSA();
}
}
Поэтому, если вы переопределяете метод суперкласса, вы можете вызвать метод, используя super
. Рассмотрим эту ссылку Java Specification для получения дополнительных пояснений
Ваш пример будет работать, если оба класса находятся в одном пакете.
Если это не так, вы должны объявить метод защищенным или общедоступным, например:
abstract class TestBase{
protected void nonabstractMethod(){
....
}
}
Если ваш метод является абстрактным, то вы не можете его называть, например:
abstract protected void abstractMethod();
Короткий ответ: да.
Вы всегда можете вызвать public
или protected
супер метод. Как и любой (экземпляр) метод в java, он будет обрабатываться политически, и конкретная реализация будет вызвана либо суперклассом, либо производным классом, если он переопределит его.