В чем разница между class.super.method и class.method?

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

Версия 1:

public class SomeClass extends OtherClass{

    public boolean someMethod() {
        ActionListener s = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                SomeClass.super.method();
            }
        };
    }
}

Версия 2:

public class SomeClass extends OtherClass{

    public boolean someMethod() {
        ActionListener s = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                SomeClass.method();
            }
        };
    }
}

Другими словами...

SomeClass.method(); или же SomeClass.super.method();

Точно так же, когда я должен использовать method() и когда я должен использовать super.method()?

Большое спасибо.

2 ответа

Решение

Они не являются "более правильными"/"стандартными", оба вызова методов имеют совершенно разное значение, так как они вызывают разные методы:

SomeClass.method(); метод вызовов method() из SomeClass(и метод () должен быть объявлен как статический, чтобы он работал)

SomeClass.super.method(); метод вызовов method() из OtherClass,

Точно так же используйте method() позвонить method() определены в данной области, super.method() если вы хотите вызвать реализацию класса родителя (даже если method() переопределено в подклассе).

method() в вашем коде, кажется, статический метод на вашем OtherClass,

В общем, чтобы всем, кто читает ваш код, было ясно, что вы вызываете статический метод для класса в иерархии вашего объекта, вы можете добавить префикс вызова к имени класса: OtherClass.method() (как обсуждено в этом ответе)

Если вы не переопределяете статический method() в вашем подклассе обычно вызывается метод родительского класса просто с method() или явно с OtherClass.method(), как уже упоминалось выше. Вам не нужно ставить перед вызовом префикс super.,

Если вы переопределяете статический method() в вашем подклассе, затем вызывая method() или же SomeClass.method() из вашего SomeClass будет иметь тот же эффект вызова статического метода, определенного в SomeClass,
Если вы хотите вызвать статический метод родительского класса, который скрыт, потому что ваш подкласс переопределяет его, вы можете либо вызвать super.method() (если вы находитесь в прямом подклассе, который переопределяет его), или снова откровенно об этом и используйте OtherClass.method(),

Другие вопросы по тегам