Главная » Java » Служебное слово super Java

0

Служебное слово super может быть использовано в теле любого нестатического члена класса. При доступе к полю или вызове метода выражение super действует как ссылка на экземпляр базового класса. Применение super – это единственный вариант, когда выбор метода обусловливается типом ссылки. Вызов super.тethod всегда означает обращение к методу тethod базового класса – никакие возможные пере определенные реализации метода в производных классах в расчет не принимаются. Вот как выглядит super в действии:

 

class That {

/** возврат строки с именем класса */

protected String nm() {

return "That”;

}

     }

class More extends That {

      protected String nm(){

                  return "More";

      }

     

      protected void printNM(){

                  That sref = (That)this;

                 

                  System.out.println("this.nm() = " + this.nm());

                  System.out.println("sref.nm() = " + sref.nm());

                  System.out.println("super.nm() = " + super.nm());

      }

}

 

Хотя sref и suреr, как кажется, ссылаются на один и тот же объект типа That, только при использовании super компилятор игнорирует тип текущего объекта, обращаясь к методу nm базового класса. Ссылка sref действует точно так же, как и this, и приказывает компилятору выбирать одну из двух реализаций метода nm, принимая во внимание фактический класс объекта. Ниже приведен результат работы метода ргintNM.

 

            this.nm() = More

serf.nm() = More

super.nm = That

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии