3.7 Отмена методов

3.7 Отмена методов


В классе derived, если мы включаем определение метода, которое имеет то же самое имя и точно то же самое число типов параметров что и метод, уже определенный в основном классе, то это новое определение заменяет старое определение метода.

3.7.1 Определение

Отмененные методы - те методы, которые находятся в суперклассе так же как в подклассе. Отмена позволяет общему классу определять методы, которые будут применены к его подклассу.

3.7.2 Вызов отменённых методов

Если объект - случай полученного класса, то отмененная версия, определенная в полученном классе - та, которая вызвана, super.someMethod () вызовет версию someMethod () непосредственно в суперклассе. Мы не можем использовать запись подобно super.super.someMethod (), чтобы вызвать метод из длинной иерархии наследования.

Следующая программа демонстрирует отмененные методы.
Пример 13:
class Superclass
{
int a ;
Superclass ()
    {
а = 10;
    }
public void printA()
    {
System.out.println( In the super class );
System.out.println( a = +a);
   }
}
class Subclass extends Superclass
{
int a ;
Subclass(int a)
    {
this.a = a;
//indicates that the variable a of this object
//should assign the value of variable a, which is
//passed through the constructor
    }
public void printA()
    {
System.out.println( In the sub class );
System.out.println( a =   +a) ;
    }
}

public class OverrideDemo
{
public static void main(String args[])
    {
Superclass si = new Subclass(10);
S1.printA() ;
Subclass s2 = new Subclass(20);
s2.printA() ;
    }
}


Вывод описанной выше программы:
Рисунок 3.17: Вывод OverrideDemo

В классе OverrideDemo запись,
Superclass s1 = new Subclass(10);
создает объект типа
Superclass, s1.printA();
вызовет метод printA() класса SubClass, потому что s1 содержит ссылку Subclass. Это также называется динамическим связыванием, так как компилятор не знает до времени выполнения, что s1 собирается содержать.

Обратите внимание: Ссылки распределяются во время выполнения.

Запись,
Subclass s2 = new Subclass(20) ;
cоздаёт объект класса SubClass. Так s2 содержит ссылку SubClass. Следовательно запись,
s2 .printA() ;
вызовет метод printA() класса SubClass. Это по-другому называется статическим связыванием, потому что s2 - объект SubClass и содержит ссылку SubClass.

Мы теперь изменим вышеупомянутую программу, чтобы вызвать метод printA () Суперкласса, не создавая объект Суперкласса.
Пример 14:
class Superclass
{
int a;
Superclass()
    {
а = 10;
    }
public void printA()
    {
System.out.println( In the super class );
System.out.println( a =   +a);
    }
}

class Subclass extends Superclass
{
int a ;
Subclass(int a)
    {
this.a = a;
    }
public void printA()
{
super.printA() ;
System.out.println( In the sub class );
System.out.println( a =   +a);
    }
}

class OverrideDemo
{
public static void main(String args [])
    {
Subclass s2 = new Subclass(20);
s2.printA() ;
    }
}


Вывод соответствующей программы:
Рисунок 3.18: Вывод

В измененной программе, мы использовали ключевое слово super, чтобы явно вызвать метод printA () Суперкласса.

назад к оглавлению вперед

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net