Мегаобучалка Главная | О нас | Обратная связь


Наследование и о классе Class



2019-12-29 152 Обсуждений (0)
Наследование и о классе Class 0.00 из 5.00 0 оценок




 

Наследование:

class DerivedClass extends BaseClass {…}

Можно наследовать только один класс (нет множественного наследования), зато можно реализовывать несколько интерфейсов. Для обращения к полям и методам суперкласса в методе дочернего класс используется super. Также можно вызывать конструктор базового класса в конструкторе дочернего:

public DerivedClass() {

super(param1, param2);

}

Для переопределения метода достаточно еще раз описать его в дочернем классе, все методы подвержены полиморфизму (нет необходимости объявлять их виртуальными). Чтобы метод нельзя было переопределить, используется модификатор final. Также можно объявить final класс, тогда от него нельзя будет унаследовать другие классы.

Если объявить класс abstract, то нельзя создать его экземпляр, только унаследовать. Метод тоже может быть abstract – в этом случае его тело определяется не в этом классе, а в дочерних.

Дочерним классам доступны поля и методы уровня public и protected.

a instanceof B – возвращает true, если a – экземпляр класса B, в противном случае false.

Если наследуемый класс не указывается явно, то неявным базовым классом становится Object. Таким образом, каждый класс унаследован (возможно, косвенно) от Object. Переменную типа Object можно использовать как ссылку на любой объект. Простые типы не наследуются от Object. Object содержит ряд важных методов:

equals() – проверяет эквивалентность двух объектов. Изначально проверяет только равенство ссылок, поэтому должен переопределяться в дочерних классах.

getClass() – возвращает объект типа Class, описывающий тип данного объекта.

hashCode() – генерирует целое число на основе состояния конкретного объекта. Метод используется при включении объекта в хэш-таблицу. При переопределении equals() надо переопределять и hashCode() – у эквивалентных объектов хэш-коды должны совпадать.

toString() – возвращает строку, отражающую состояние объекта.

clone() – создает копию объекта. Без переопределения недоступен.

Class:

Обьект метаданных о каком либо классе. Позволяет узнать методы, поля, создать экземпляр другого класса. Обьект Class создается либо как жертва.getClass() или как Class.forName(“полное квалификационное имя”). Данный класс – основа отражения (reflection).


1.7 Интерфейсы и обратные вызовы в Java

 

Интерфейс – спецификация требований к реализуемым классом методам:

public interface MyInterface {

int myMethod();

}

Все методы, объявленные в интерфейсе, считаются обьявлеными как public.

Класс может реализовать один или несколько интерфейсов:

class MyClass implements MyInterface { … }

class MyClass2 implements MyInterface, MyInterface2 { … }

Интерфейс – не класс, нельзя создать его экземпляр. Но интерфейсная переменная может ссылаться на объект класса, который реализует этот интерфейс. С помощью instanceof можно проверить, реализует ли объект заданный интерфейс.

В Java интерфейсы часто применяются вместо указателей на функции для организации механизма обратного вызова. Объекту, который будет выполнять обратный вызов, передается интерфейсная переменная, метод которой будет вызван. После этого первый объект сохраняет эту переменную и при необходимости вызывает один из ее методов. Например, таймер javax.swing.Timer требует интерфейс java.awt.event.ActionListener для периодического выполнения обратного вызова.

public class MoneyCounter implements ActionListener {

public void actionPerformed( ActionEvent e ) {

money += money * percent;

System.out.println( "Денег сейчас: " + money );

}

}


1.8 Вложенные классы и интерфейсы

 

Вложенный (inner) класс или интерфейс – класс или интерфейс, определенный внутри другого класса. Объект вложенного класса имеет доступ ко всем полям и методам содержащего его класса (включая закрытые). Его можно скрыть от других классов пакета. Можно создавать анонимные вложенные классы.

class MyClass {

...

private class MyInnerClass { … }

}

Обращение из вложенного класса к методам и полям внешнего: можно просто someMethod(), а можно так: MyClass.this.SomeMethod().

Создание экземпляра вложенного класса:

MyInnerClass obj = new MyInnerClass();

MyInnerClass obj = this.new MyInnerClass();

А если вне класса:

MyClass myobj = new MyClass();

MyClass.MyInnerClass obj = myobj.new MyInnerClass();

Вложенный класс можно определить даже внутри метода (локальный вложенный класс). Они объявляются без спецификаторов видимости.

Анонимные внутренние классы:

Чаще всего используется в обработчиках GUI:

MyInterface obj = new MyInterface() { … };

 

myButton.addActionListener( new ActionListener() {

public void actionPerformed( ActionEvent e ) {

doSmth( );

}

} );

Вложенный класс можно объявить static, в этом случае он не будет иметь доступ к нестатическим полям и методам внешнего класса. Это полезно, если экземпляр вложенного класса создается в статическом метода внешнего класса.

Вложенные классы, определенные в интерфейсах, считаются по умолчанию статическими и публичными.

 



2019-12-29 152 Обсуждений (0)
Наследование и о классе Class 0.00 из 5.00 0 оценок









Обсуждение в статье: Наследование и о классе Class

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (152)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)