Наследование и область действия метода в Java - PullRequest
0 голосов
/ 27 сентября 2011

В следующем примере псевдокода:

public class MyPanel extends JPanel {
    public void reset() {
        this.clear();
        clear();
    }
    public void clear() { System.out.println("FAIL"); }
};

public class MySpecialPanel extends MyPanel {
    public void clear() { System.out.println("Hello, world"); }
};

При вызове (new MySpecialPanel()).reset() не должны ли оба значения this.clear() и clear() разрешаться в одной и той же области видимости?Есть ли разница между this.clear() и clear()?

Ответы [ 4 ]

5 голосов
/ 27 сентября 2011
public void reset() {
    this.clear();
    clear();
}

В приведенном выше коде это вызывает один и тот же метод дважды.Нет никакой разницы между clear() и this.clear().

Вы можете явно вызвать метод суперкласса с помощью super.clear().

1 голос
/ 27 сентября 2011

Нет разницы между this.clear() и clear().

У вас есть объект MySpecialPanel, и метод clear() для этого объекта вызывается дважды.Для того, чтобы вызвать суперкласс, вы должны использовать super.clear()

Итак, вы делаете что-то вроде этого -

public void reset() {
        clear();
        super.clear();
}
0 голосов
/ 27 сентября 2011

Указание очевидного, поскольку многие уже ответили - когда вы вызываете clear() для объекта, этот объект находится в области видимости; когда вы используете this, вы ссылаетесь на тот же объект в контексте.

0 голосов
/ 27 сентября 2011

в вашем коде:

public void reset() {
    this.clear();
    clear();
}

и this.clear (), и clear () одинаковы.

это ключевое слово для установки области вызова внутри классасам супер устанавливает область видимости для самого класса и суперкласса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...