Анонимные внутренние классы в Java
Пример public class Outerclass { // Метод экземпляра внешнего класса void my_Method() { int num = 888; // Локальный метод внутреннего класса class MethodInner_Demo { public void print() { System. out. println(" Это метод внутреннего класса: " + num); } } // Конец внутреннего класса // Доступ к внутреннему классу MethodInner_Demo inner = new MethodInner_Demo(); inner. print(); } public static void main(String args[]) { Outerclass outer = new Outerclass(); outer. my_Method(); }}Получим следующий результат: Это метод внутреннего класса: 888Анонимные внутренние классы в Java Анонимный внутренний класс — это внутренний класс, объявленный без имени класса. В случае анонимных внутренних классов в Java мы объявляем и создаем их в одно и то же время. Как правило, они используются всякий раз, когда Вам необходимо переопределить метод класса или интерфейса. Синтаксис анонимного внутреннего класса в Java выглядит следующим образом: Синтаксис AnonymousInner an_inner = new AnonymousInner() { public void my_method() {........ ........ } };Пример Следующая программа показывает, как переопределить метод класса с использованием анонимного внутреннего класса. abstract class AnonymousInner { public abstract void mymethod(); } public class Outer_class { public static void main(String args[]) { AnonymousInner inner = new AnonymousInner() { public void mymethod() { System. out. println(" Это пример анонимного внутреннего класса" ); } }; inner. mymethod(); }}Получим следующий результат: Это пример анонимного внутреннего классаТочно так же Вы можете переопределить методы конкретного класса, а также интерфейс, используя в Java анонимный внутренний класс.
Анонимный внутренний класс как аргумент Как правило, если метод принимает объект интерфейса, абстрактный класс или конкретный класс, то мы можем реализовать интерфейс, расширить абстрактный класс и передать объект методу. Если это класс, мы можем напрямую передать его методу.
Но во всех трех случаях Вы можете в Java передать анонимный внутренний класс методу. Синтаксис передачи анонимного внутреннего класса в качестве аргумента метода: Синтаксис obj. my_Method(new My_Class() { public void Do() {..... ..... }});Пример Следующая программа показывает, как передать анонимный внутренний класс в качестве аргумента метода. // Интерфейсinterface Message { String greet(); } public class My_class { // Метод, который принимает объект интерфейса Message public void displayMessage(Message m) { System. out. println(m. greet() + ", это пример анонимного внутреннего класса в качестве аргумента" ); } public static void main(String args[]) { // Создание класса My_class obj = new My_class(); // Передача анонимного внутреннего класса в качестве аргумента obj. displayMessage(new Message() { public String greet() { return " Привет"; } }); }}Если Вы скомпилируете и выполните вышеуказанную программу, то получите следующий результат: Привет, это пример анонимного внутреннего класса в качестве аргумента
Статический вложенный класс в Java Статический внутренний класс — это вложенный класс, который является статическим членом внешнего класса. Доступ к нему возможен без создания экземпляра внешнего класса с использованием других статических элементов. Как и статические члены, статический вложенный класс не имеет доступа к переменным экземпляра и методам внешнего класса. Синтаксис статического вложенного класса в Java выглядит следующим образом: Синтаксис class MyOuter { static class Nested_Demo { }}Пример Создание экземпляра статического вложенного класса немного отличается от экземпляра внутреннего класса. Следующая программа показывает, как использовать статические вложенные классы. public class Outer { static class Nested_Demo { public void my_method() { System. out. println(" Это мой вложенный класс" ); } } public static void main(String args[]) { Outer. Nested_Demo nested = new Outer. Nested_Demo(); nested. my_method(); }}Получим следующий результат:
22. Java – Наследование классов, интерфейсов, методов и конструкторов с помощью ключевых слов super, extends, instanceof и отношений IS-A и HAS-A Наследование — это процесс перенимания классом свойств (методов и полей) другого класса. С использованием в Java наследования информация становится управляемой в иерархическом порядке. Класс, который наследует свойства другого класса, называется подклассом (производным классом, наследующим классом), а класс, свойства которого наследуются, известен как суперкласс (базовый класс, родительский класс) Ключевое слово extends extends — это кодовое слово, используемое для наследования свойств класса. Взглянем на синтаксис этого ключевого слова. Синтаксис class Super {... }class Sub extends Super {... }Пример кода Дальше приведён пример процесса наследования на Java. На этом примере Вы можете рассмотреть два класса с именами Calculator и My_Calculator. Используя ключевое слово extends в Java, My_Calculator перенимает методы addition() и subtraction() класса Calculator. Скопируйте и вставьте эту программу в файле под именем My_Calculator. java class Calculator { int c; public void addition(int a, int b) { c = a + b; System. out. println(" Сумма чисел: " + c); } public void subtraction(int a, int b) { c = a - b; System. out. println(" Разность чисел: " + c); }} public class My_Calculator extends Calculator { public void multiplication(int a, int b) { c = a * b; System. out. println(" Произведение чисел: " + c); } public static void main(String args[]) { int a = 10, b = 20; My_Calculator cal = new My_Calculator(); cal. addition(a, b); cal. subtraction(a, b); cal. multiplication(a, b); }}Скомпилируйте и выполните вышеприведённый код, как показано ниже. javac My_Calculator. javajava My_CalculatorПосле запуска программы получим следующий результат: Сумма чисел: 30Разность чисел: -10Произведение чисел: 200В данной программе, при создании объекта классу My_Calculator, копия содержимого суперкласса создаётся в нём же. Поэтому, используя объект подкласса, Вы можете получить доступ к членам суперкласса. Ссылочная переменная суперкласса может содержать объект подкласса, но, используя эту переменную, Вы можете иметь доступ только к членам суперкласса, поэтому, чтобы иметь доступ к членам обоих классов, рекомендуется всегда создавать ссылочную переменную к подклассу.
Обращаясь к программе выше, Вы можете создать экземпляр класса, как в примере ниже. Но, используя ссылочную переменную суперкласса, Вы не можете вызвать метод multiplication(), который принадлежит подклассу My_Calculator. Calculator cal = new My_Calculator(); cal. addition(a, b); cal. subtraction(a, b);Примечание: подкласс наследует все члены (поля, методы, вложенные классы) из суперкласса. в Java конструкторы не являются членами, поэтому они не наследуются подклассом, но конструктор суперкласса может быть вызван из подкласса.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|