Вызов метода из дочернего под-класса

192
01 февраля 2020, 12:40

Есть структура

public interface CacheService {
    void getId();
}
public class AbstractDaoService implements CacheService {
    public void getId(){}
}
public interface UserDaoService {}
public class UserDaoServiceImpl extends AbstractDaoService implements UserDaoService {}
public class MyOtherClass {}
public class MyClass extends MyOtherClass {
    UserDaoService userService=new UserDaoService();
    myMethod(){
    userService.super.getId(); // Можно ли как-то это реализовать?
}

У меня собственно вопрос, можно ли как-то это реализовать кроме как добавление вот так?

public class UserDaoServiceImpl extends AbstractDaoService implements UserDaoService {
    public myOtherMethod(){
    super.getId(){}
    }
}
public class MyClass extends MyOtherClass {
    UserDaoService userService=new UserDaoService();
    myMethod(){
    userService.myOtherMethod();
    }
}

Почему бы не имплеметировать CacheService сразу в UserDaoServiceImpl, потому что другие классы тоже, в будущем, должны будут использовать метод из CacheService. И в каждый класс добавлять интерфейс, мне кажется, не красиво )

Answer 1

Можно использовать Reflection Api

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
interface CacheService {
    void getId();
}
class AbstractDaoService implements CacheService {
    @Override
    public void getId() {
        System.out.println("Привет: AbstractDaoService::getId()");
    }
}
class UserDaoServiceImpl extends AbstractDaoService {
}
public class TestDemo {
    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
        UserDaoServiceImpl service = new UserDaoServiceImpl();
        Class<UserDaoServiceImpl> sClass = UserDaoServiceImpl.class;
        Method method = sClass.getSuperclass().getMethod("getId");
        method.invoke(service);
    }
}

output

Привет: AbstractDaoService::getId()
READ ALSO
2048 Game //Java

2048 Game //Java

Нужно поставить двойку в случайний пустой JLabel по нажатию на кнопку "Start"

159
Локализация Java-класса в Android

Локализация Java-класса в Android

Знаю как локализовать ресурсы приложения (папку res)

161
Константа static + final, или только final?

Константа static + final, или только final?

Чтобы создать константу в Java, нужно пометить переменную сразу двумя модификаторами: static и finalПрочитал это в книге, а если просто переменную...

163
Как добавить toolbar в listActivity

Как добавить toolbar в listActivity

После того как поменял extends с appCompatActivity на listActivity, метод setSupportActionBar стал светиться краснымЧто делать? Может быть что нибудь поменять в коде?...

189