Скачать презентацию Наследование полиморфизм и всякая всячина Конструкторы классов Скачать презентацию Наследование полиморфизм и всякая всячина Конструкторы классов

2_.Наследование_полиморфизм_и_всякая_всячина.pptx

  • Количество слайдов: 10

Наследование, полиморфизм и всякая всячина Наследование, полиморфизм и всякая всячина

Конструкторы классов, super //класс с конструктором “по умолчанию” class My. Class { My. Class() Конструкторы классов, 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; } Ключевое слово Обращение к членам класса 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 Ø Переданные аргументы Аргументы переменной длины Синтаксис: 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 члены не доступны наследниках Ссылочной переменной из суперкласса может Наследование Ключевое слово 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 Здесь должна быть обработка исключений throws t-c-f throwable: error exception runtime exeption