YES .Вы можете сделать это с аспектом.Это не истинное переопределение, но результат будет таким.
Здесь ваш суперкласс;
public class MySuperClass {
private void content(String text) {
System.out.print("I'm super " + text);
}
public void echo() {
content("!");
}
}
Создайте интерфейс, который содержит подобный метод;
public interface Content {
void safeContent(String text);
}
Createаспект, который заставляет суперкласс реализовать этот интерфейс и добавить советник по вызову для его вызова.
public privileged aspect SuperClassAspect {
void around(MySuperClass obj)
: execution(* content(String)) && target(obj) {
Object[] args = thisJoinPoint.getArgs();
((Content) obj).safeContent((String) args[0]);
}
// compiler requires
public void MySuperClass.safeContent(String text) {}
declare parents :MySuperClass implements Content;
}
Создайте свой дочерний класс, который расширяет super и реализует этот интерфейс.
public class Overrider extends MySuperClass implements Content {
public void safeContent(String text) {
System.out.print("Not that super " + text);
}
}
Теперь, если вы создадите объект Overrider и вызовете метод echo, у вас будет выходной метод метода OverConders safeContent.