Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Анонимные внутренние классы в 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...