Пример. Расширение интерфейсов. Пример /* File name : MammalInt.java */public class MammalInt implements Animal { public void eat() { System.out.println("
Пример /* File name: MammalInt. java */public class MammalInt implements Animal { public void eat() { System. out. println(" Млекопитающее кушает" ); } public void travel() { System. out. println(" Млекопитающее путешествует" ); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m. eat(); m. travel(); }}Получим следующее: Млекопитающее кушаетМлекопитающее путешествуетПри переопределении методов в интерфейсе, нужно следовать некоторым правилам: · Проверенные исключения не должны быть объявлены по методам реализации, отличным от тех, которые были объявлены методом интерфейса или подклассами тех, которые были объявлены методом интерфейса. · Подпись метода интерфейса и того же типа или подтипа возврата должна поддерживаться (сохраняться) при переопределении методов. · Сам класс реализации может быть абстрактным, а если это так, то методы интерфейса не должны быть реализованы. При реализации интерфейсов есть некоторые правила: · Класс может реализовать более одного интерфейса за раз. · Класс может расширить только один класс, но реализовать множество интерфейсов. · Интерфейс может расширить другой интерфейс таким же образом, как класс расширяет другой класс. Расширение интерфейсов Интерфейс может расширять другой интерфейс так же, как класс другой класс. Ключевое слово extends используется для расширения интерфейса, и дочерний интерфейс наследует методы родительского интерфейса. Приведённый интерфейс Sports расширен интерфейсами Hockey и Football. Пример // Filename: Sports. javapublic interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // Filename: Football. javapublic interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // Filename: Hockey. javapublic interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }Интерфейс Hockey имеет четыре метода, но он наследует два из Sports; таким образом, класс, который реализует Hockey, должен реализовать все шесть методов. Подобно этому, класс, который реализует Football, должен определить три метода из Football и два метода из Sports.
Расширение множества интерфейсов Класс в Java может расширить только один родительский класс. Множественное наследование невозможно. Однако интерфейсы не классы, и интерфейс может расширить более чем один родительский интерфейс. Ключевое слово extends используется лишь раз, а родительские интерфейсы объявляются через запятую. Например, если интерфейс Hockey расширил и Sports, и Event, то объявление выглядело бы так: public interface Hockey extends Sports, EventИнтерфейсы тегов Самое распространённое использование расширения интерфейсов происходит тогда, когда родительский интерфейс не содержит каких-либо методов. Например, интерфейс MouseListener в пакете java. awt. event расширил java. util. EventListener, который определяется так: package java. util; public interface EventListener{}Интерфейс без методов в нём называется интерфейсом тегов. Есть две простые дизайнерские цели для интерфейсов тегов: Создаёт общего родителя – как в случае с интерфейсом EventListener, который расширяется множеством других в Java API, вы можете использовать интерфейс тегов, чтобы создать общего родителя среди группы интерфейсов. Например, когда интерфейс расширяет EventListener, то JVM знает, что этот конкретный интерфейс будет использоваться в сценарии делегирования событий. Добавляет тип данных в класс – эта ситуация является источником термина «тегирование». Класс, который реализует интерфейс тегов, не должен определять какие-либо методы (т. к. интерфейс не имеет таковых), но класс становится типом интерфейса через полиморфизм.
28. Java – Пакеты
В Java пакеты (package) используются для предотвращения конфликтов с названиями, для контроля доступа, для облегчения поиска/нахождения и использования классов, интерфейсов, перечислений и аннотаций и т. д. Пакеты можно определить как группировку связанных типов (классы, интерфейсы, перечисления и аннотации), предоставляющий защиту доступа и управление пространством имён. Некоторые из существующих пакетов в Java: · java. lang – связывает фундаментальные классы. · java. io – классы для ввода и выводные функции связаны в этом пакете. Программисты могут определять их пакеты для связывания групп классов/интерфейсов и т. д. Группировка связанных классов, реализованных вами, является хорошим практическим решением, т. к. программист сможет легко определить, что классы, интерфейсы, перечисления и аннотации связаны. Так как пакет создаёт новое пространство имён, в нём не будет никаких конфликтов с именами в других пактах. Используя пакеты, легче предоставить управление доступом и легче найти связанные классы.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|