Могу ли я переопределить закрытый метод в Java?

Я знаю, что могу использовать отражение для вызова частного метода, а также для получения или установки значения частной переменной, но я хочу переопределить метод.

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;
    }
}

Я хочу, чтобы метод mainв SubClassвыводил 2, но он выводит 1. Я слышал, что это можно сделать с помощью отражения, но я не могу понять, как это сделать. Если не отражение, кто-нибудь знает другой способ сделать это? (Кроме защиты SuperClass.getInt()или копирования и вставки метода printInt()в SubClass.) Если на самом деле переопределить частный метод невозможно, есть ли способ поместить на него какой-то триггер, который будет вызывать метод в моем подклассе до или после выполнения частного метода?

13
задан Cylian 28 May 2012 в 13:16
поделиться