- •Java - объектно-ориентированный язык
- •Виртуальная Java-машина.
- •Алфавит языка Java
- •Типы данных
- •Числа высокой точности
- •Переменные в Java
- •Объявление переменной
- •Область действия и время жизни переменной
- •Операции в Java
- •Арифметические операции
- •Логические операции
- •Побитовые операции
- •Операции сдвига
- •Тернарный оператор ?:
- •Оператор запятая
- •Одномерные массивы
- •Многомерные массивы
- •Функции
- •Класс Поля и методы
- •Модификаторы доступа
- •Инициализация и очистка
- •Перегрузка методов
- •Ключевое слово this
- •Вызов конструктора из конструктора
- •Использование объектов в качестве параметров
- •Ключевое слово static
- •Спецификатор final
- •Вложенные и внутренние классы
- •Сборщик «мусора»
- •Как работает сборщик мусора
- •Наследование
- •Основы наследования
- •Использование ключевого слова super
- •Использование super для вызова конструктора суперкласса
- •Использование super для доступа к скрытым членам суперкласса
- •Конструкторы при наследовании
- •Динамическая диспетчеризация методов
- •Абстрактные классы
- •Использование final с наследованием
- •Использование final для отказа от переопределения
- •Использование final для отмены наследования
- •Класс Object
- •Пакеты и интерфейсы Пакеты
- •Оператор package
- •Оператор import
- •Уровни доступа.
- •Интерфейсы
- •Оператор implements
- •Частичные реализации
- •“Множественное” наследование в Java
- •Конфликты имен при комбинировании интерфейсов
- •Расширение интерфейса
- •Группировка констант
- •Инициализирование полей в интерфейсах
- •Вложенные интерфейсы
- •Стандартный ввод/вывод
- •Чтение из стандартного ввода
- •Замена System.Out на PrintWriter
- •Первое приложение Java
- •Исключительные ситуации. Обработка исключений
- •Типы исключений
Использование super для вызова конструктора суперкласса
Из конструктора подкласса можно осуществить вызов конструктора суперкласса используя ключевое слово super в следующей форме.
super(список параметров);
где список параметров – список передаваемых переменных конструктору суперкласса. Эта инструкция должна быть всегда первой в конструкторуе подкласса. Как и обычный конструктор (точнее в соответствии с ним) super может быть перегружен.
class A // суперкласс А
{ int a; // (public) доступен в подклассе
private int b; // не доступен в подклассе
protected int c; // доступен в подклассе
A(){} // конструктор без параметров
A(int aa, int bb) // конструктор c 2 параметрами
{ a = aa; // создание нового объекта
b = bb;
c = a+b;
}
A(int aa, int bb, int cc) // конструктор c 3 параметрами
{ a = aa; // создание нового объекта
b = bb;
c = cc;
}
A(A ob) // конструктор параметром объект
{ a = ob.a; // построение клона объекта
b = ob.b;
c = ob.c;
}
void fun_A()
{ System.out.println("supperclass (a,b,c) "+a+' '+ b+' '+c);
}
}
class B extends A // подкласс В
{ int d;
B() { } // конструктор без параметров
B(int aa, int bb, int dd) // конструктор c 3 параметрами
{ super(aa,bb);
d = dd;
}
B(int aa, int bb, int cc, int dd) // конструктор c 4 параметрами
{ super(aa,bb,cc);
d = dd;
}
B(B ob) // конструктор параметром объект
{ super(ob);
d = ob.d; // построение клона объекта
}
void fun_B()
{ System.out.println("subclass (a,c,d) "+a+' '+c+' '+d);
}
}
class start
{ public static void main(String[] args)
{ A ob1=new A(1,2);
ob1.fun_A();
A ob2=new A(3,4,5);
ob2.fun_A();
B ob3 = new B(6,7,8,9);
ob3.fun_A();
ob3.fun_B();
B ob4 = new B(10,11,12);
ob4.fun_A();
ob4.fun_B();
}
}
Несколько слов о конструкторе:
B(B ob) // конструктор параметром объект
{ super(ob);
d = ob.d; // построение клона объекта
}
В нем super(ob), вызывается для объекта типа класс B. Эта инструкция активизирует конструктор своего непосредственного суперкласса А:
A(A ob),
где ob уже переменная типа суперкласса А. Как отмечалось выше, переменная суперкласса может быть использована для ссылки на любой объект производного класса.
Использование super для доступа к скрытым членам суперкласса
Вторая форма super напоминает действие ссылки this с тем отличием, что super обращается к объекту суперкласса. Общий формат использования второй формы super имеет вид:
super.имя_компоненты;
При этом компонента может быть либо данным, либо методом класса. Эта форма используется в том случае если компонента суперкласса, к которой следует обратиться, скрыта соответствующей (одноименной) компонентой подкласса. Ниже приведен пример демонстрирующий использование второй формы super.
class A // суперкласс А
{ protected int a;
A() { } // конструктор без параметров
A(int aa) // конструктор c 2 параметрами
{ a = aa; // создание нового объекта
}
A(A ob) // конструктор параметром объект
{ a = ob.a; // построение клона объекта
}
void show()
{ System.out.println("supperclass a = " + a);
}
}
class B extends A // подкласс В
{ int a;
B() { } // конструктор без параметров
B(int aa, int bb) // конструктор с параметрами
{ super(aa);
a = bb;
}
B(B ob) // конструктор параметром объект
{ super(ob);
a = ob.a; // построение клона объекта
}
void show()
{ super.show();
System.out.println("subclass a= " + a);
}
void fun()
{ int a;
a = this.a + super.a;
System.out.println("a(supperclass)+a(subclass) = " + a);
}
}
class start
{ public static void main()
{ B ob = new B(1,2);
ob.show();
ob.fun();
}
}