Есть структура
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. И в каждый класс добавлять интерфейс, мне кажется, не красиво )
Можно использовать 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()
Продвижение своими сайтами как стратегия роста и независимости