Переопределение метода Java - доступ к методам в parent - это возможно? - PullRequest
1 голос
/ 08 июля 2011

Допустим, я создаю экземпляр класса и перезаписываю один из его методов одновременно - вот так

MyClass fred = new MyClass() {
    @Override
    public void mymethod() {
        super.mymethod();
        //call something here
    }
};

Теперь давайте представим, что я хочу вызвать локальный метод с тем же именем и теми же (отсутствующими) параметрами в качестве моего переопределенного метода - например, У меня

public void mymethod() {
    //my stuff in here
}

Как я могу вызвать это из переопределенного метода (на линии // здесь что-то вызвать) ???

Это вообще возможно? Использование

this.mymethod();  

вызывает бесконечный цикл (переопределенный метод просто вызывает сам себя)

Есть ли способ доступа к этому методу (возможно, кроме как через статическую ссылку?)

Извините, если это распространенный вопрос - его сложно найти, и на один вопрос, который я нашел, не было ответов, и он не был так хорошо сформулирован, поэтому я пытаюсь сам себя!

Ответы [ 3 ]

4 голосов
/ 08 июля 2011

У меня нет удобного компилятора, поэтому я не уверен на 100%, но попробуйте это:

ParentClass.this.myMethod();
2 голосов
/ 08 июля 2011

Я не уверен, что полностью понял вопрос, но думаю, что вы хотите что-то вроде этого:

public class ParentClass {
    public void mymethod() {
        ....
    }

    public void someOtherMethod() {
        MyClass fred = new MyClass() {
            @Override
            public void mymethod() {
                super.mymethod();
                //call something here
                ParentClass.this.mymethod();
            }
        }
    }
}

Примечание ParentClass.this.mymethod()

2 голосов
/ 08 июля 2011

Уродливое, но работающее решение:

final MyOtherClass parent = this;

MyClass fred = new MyClass() {
    @Override
    public void mymethod() {
        super.mymethod();
        parent.mymethod();
    }
};

Я изо всех сил пытаюсь увидеть сценарий, в котором вам нужно сделать это для именования, но полезно знать, что this в анонимном классе будет ссылаться на анонимный класс, а не на «родителя»; так что если вы обнаружите необходимость доступа к методу родителя, это полезный метод.

FWIW, вот рабочий пример .

...