Kann ich überschreiben, eine private Methode in Java?

Ich weiß, dass ich verwenden können, Reflexion, rufen eine private Methode, und zum abrufen oder festlegen der Wert einer privaten Variablen, aber ich möchte eine Methode überschreiben.

public class SuperClass {

    public void printInt() {
        System.out.println("I am " + getClass() + ". The int is " + getInt());
    }

    private int getInt() {
        return 1;
    }
}

public class SubClass extends SuperClass {

    public static void main(String[] args) {
        (new SubClass()).printInt();
    }

    public int getInt() {
        return 2;
    }
}

Möchte ich die main Methode in SubClass ausdrucken 2, aber es druckt 1.
Ich habe gehört, dass dies getan werden kann, durch Reflexion, aber ich kann nicht herausfinden, wie.
Wenn nicht Reflexion, kennt jemand einen anderen Weg, es zu tun?
(Anders als die SuperClass.getInt() geschützt, oder kopieren und einfügen der printInt() Methode in SubClass.)
Wenn tatsächlich überschreiben der privaten Methode nicht möglich ist, gibt es eine Möglichkeit der Unterbringung eine Art trigger, der es wird, eine Methode aufzurufen, die in meiner sub-Klasse, die entweder vor oder nach der privaten Methode führt?

Es ist nicht sichtbar von der Kind-Klasse kann somit nicht overrided.
machen Sie es protected oder visible...sonst kippe
"Kann ich überschreiben, eine private Methode in Java?" -- Antwort: Nein
placing some sort of trigger on it that will invoke a method in my sub-class either before or after the private method executes - Sie können CGLIB oder javassist mit AOP Techniken, um dies zu ermöglichen. Spring verwendet sogenannte around-advice schwer.
Nicht einmal javassist kann, außer eine private Methode, aber load-time-weaving beraten können private Methoden (nicht durch überschreiben von Ihnen, obwohl).

InformationsquelleAutor numbers longer | 2012-05-16

Schreibe einen Kommentar