2_.Наследование_полиморфизм_и_всякая_всячина.pptx
- Количество слайдов: 10
Наследование, полиморфизм и всякая всячина
Конструкторы классов, super //класс с конструктором “по умолчанию” class My. Class { My. Class() {} } class Your. Class extends My. Class { Your. Class() { super(); } } Ключевое слово super: - Доступ к элементам родительского класса: super. do. Work(); - Доступ к конструктору родительского класса: обращение к конструктору родительского класса всегда первым оператором super();
Обращение к членам класса class Complex { int real; int img; } Ключевое слово this: Доступ к элементам текущего класса: this. real = 4; Сокрытие переменной: public void set. Real(int real) { this. real = real; }
Перегрузка методов Способ поддержки полиморфизма Два и более методов с одним именем перегружают друга Не допускается перегрузка по возвращаемому значению (перегруженные методы должны отличаться типомколичеством параметров) Поддержка динамической диспетчеризации методов (полиморфизм времени выполнения) Допускается перегрузка конструкторов class String. Builder { public String. Buidler() //body public String. Builder(int capacity) //body public String. Builder append(boolean b) //body public String. Builder append(char c) //body }
Вложенные и внутренние классы Вложенные классы: Внутренний класс: Объявляются внутри других классов Внутренний класс -это нестатический вложенный класс (гы!) В объявлении используются модификатор static Имеет доступ ко всем переменным и методам своего внешнего класса Вложенный класс не может ссылаться на внешний class Outer { int a; class Inner { void display() { print(a); } } void test() { for (int i=0; i<10; i++) class Inner 0 {} } //внутренний класс
Аргументы переменной длины Синтаксис: public static void main(String … args) //body Ø Переданные аргументы оборачиваются в массив Ø Параметр переменной должен быть последним среди всех параметров Ø Метод должен содержать только один параметр с переменным количеством аргументов Ø Возможна неоднозначность int doit(boolean. . . vals) //body int doit(int. . . vals) //body Правила перегрузки: Ø Разные типы varargs Ø Добавление обычных параметров Ø Специализация void print(int arg) //вызов с одним аргументом void print(int … args) //вызов с двумя и более
Наследование Ключевое слово extends private члены не доступны наследниках Ссылочной переменной из суперкласса может быть присвоена ссылка на любой подкласс, производный от этого суперкласса protected члены – аналог private, но доступны наследнику final предотвращает попытки наследования Class A { private int priv. A; protected int prot. A; public int pub. A; int a; } Class B extends A { void do. Meth() { priv. A = 1; //compilatrion error prot. A = 4; //ok pub. A = 8; //ok a = 8; //ok } }
Защита доступа
Динамическая диспетчеризация методов - это механизм, с помощью которого вызов переопределенного метода разрешается во время выполнения, а не компиляции Вариант переопределенного метода выбирается для выполнения в зависимости от типа объекта, на который делается ссылка, а не типа ссылочной переменной class Magic { void do. Magic(Mage mage) { reducio(mage); //make him smaller } } class Dark. Magic { void do. Magic(Mage mage) { if (mage. is. Muggle) avada. Kedavra(mage); //make him dead } } Magic magic = new Magic(); Magic madjeec = new Dark. Magic(); //seems like ordinary magic. do. Magic(ron); madjeec. do. Magic(hermione); //ooops
Здесь должна быть обработка исключений throws t-c-f throwable: error exception runtime exeption