[Java] Урок: Понятие интерфейса
|
|
[CM]Jaxson |
Дата: Вторник, 09.10.2012, 19:30 | Сообщение # 1
|
٩(̾●̮̮̃̾•̃̾)۶
Сообщений: 801
Статус: Offline
|
На начальных уроках от Шелби вы поднакомились с таким понятием, как переменная. На самом же деле в переменных можно хранить не только числа и строки, но так же и экземпляры объектов. Допустим, мы хотим написать программу для автоматизации предприятия торговли. И в этой программе хотим написать какой то алгоритм анализа товаров, для чего для каждого вида товаров определяем свой класс, который будет содержать свои специфические для данной товарной группы алгоритмы анализа. В данный момент мы, конечно, не будем писать эту программу, а представим, что пишем ее, что бы просто изучить понятие интерфейса и как оно поможет нам в будущим. Допустим, мы создали заготовки классов для таких видов товаров, как "обувь" и "хлеб", и написали тестовый пример: Code class Shoe { public String getName(int id) { if(id==1) return("Shoes"); if(id==2) return("Girl's shoes"); if(id==3) return("Boots"); return ("Unknow"); } } class Bread { public String getName(int id) { if(id==1) return("White"); if(id==2) return("Black"); if(id==3) return("Loaf"); return ("Unknow"); } } public class Wares { public static void main(String[] args) { Shoe a; a=new Shoe(); System.out.println(a.getName(1)); System.out.println(a.getName(2)); System.out.println(a.getName(3)); System.out.println(a.getName(4)); Bread b; b=new Bread(); System.out.println(b.getName(1)); System.out.println(b.getName(2)); System.out.println(b.getName(3)); } } Компилируем его, как мы это уже умеем на 1 уроке и запускаем: А теперь посмотрите на код внимательней. Видите, для каждого класса (вида товара) мы создали свою переменную. А если мы на момент создание переменой еще не знаем, экземпляр какого класса мы будем хранить в ней? Мы же не можем присвоить переменной тип Shoe значение Bread! Но выход есть. Надо использовать интерфейс. Иными словами, создаем некоторое подобие класса, которое по сути дела полноценным классом не является. Это и есть интерфейс. Мы не может создать экземпляр интерфейса, но можем определить переменную типа интерфейс. И в этой переменной мы сможем хранить экземпляры любых классов, которые наследую данный интерфейс. Собственно говоря, интерфейс отличается от класса тем, что в нем можно объявить методы, но нельзя реализовать их. Они уже реализуются в наследуемых классах. Давайте посмотрим на примере, как это делается: Code interface Ware { static final String origin="My corp"; public String getName(int id); } class Shoe implements Ware { public String getName(int id) { if(id==1) return("Shoes"); if(id==2) return("Girl's shoes"); if(id==3) return("Boots"); return ("Unknow"); } } class Bread implements Ware { public String getName(int id) { if(id==1) return("White"); if(id==2) return("Black"); if(id==3) return("Loaf"); return ("Unknow"); } } public class Proba { public static void main(String[] args) { Ware a; a=new Shoe(); System.out.println(a.getName(1)); System.out.println(a.getName(2)); System.out.println(a.getName(3)); System.out.println(a.getName(4)); a=new Bread(); System.out.println(a.getName(1)); System.out.println(a.getName(2)); System.out.println(a.getName(3)); } } Как видим, благодаря интерфейсу, мы можем использовать оду и ту же переменную для хранения разных классов. Откомпилируем пример и убедимся, что он работает, делает то же самое, что и предыдущий:
[ Skype ] [ Профиль ] [ Mods Pack ] [ VK ] [ Геймеры ] Помогаю новичкам, по всем вопросом комне в Skype/VK. VK ВЗЛОМАН, НЕ РАБОТАЙТЕ СОМНОЙ. МНЕ ВСЁ ВЗЛОМАЛИ СКАЙП И ВК. СКАЙП ВОССТОНОВИЛ.
Сообщение отредактировал [CM]Jaxson - Вторник, 09.10.2012, 20:33 |
|
|
|
[WS]Grenhelgets |
Дата: Понедельник, 01.12.2014, 17:47 | Сообщение # 2
|
|
Добавь в скайп nicelse.ws предложение есть. Добавлено (01.12.2014, 17:47) --------------------------------------------- Добавь в скайп nicelse.ws предложение есть.
|
|
|
|
CM_BaTbka |
Дата: Понедельник, 02.03.2015, 11:28 | Сообщение # 3
|
Боец
Сообщений: 143
Статус: Offline
|
Добавь в скайп nicelse.ws предложение есть Добавлено (02.03.2015, 11:28) --------------------------------------------- Добавь в скайп nicelse.ws предложение есть
Цель 100+ репутации [✔] Цель 200+ репутации [✔] Цель 300+ репутации.[✔] Цель 400+ репутации.[✔] Цель 500+ репутации [✖] Цель 1000+ репутации [✖] Cheater CM. [✖] http://cheat-master.ru/forum/17-344495-1 http://cheat-master.ru/forum/199-429322-1 http://cheat-master.ru/forum/199-429328-1
|
|
|
|
BodyToMind |
Дата: Среда, 29.07.2015, 18:20 | Сообщение # 4
|
Боец
Сообщений: 139
Статус: Offline
|
Спасибо пригодится в дальнейшем :3
[✔]100 репутации[✔] [✔]200 репутации[✔] [✔]300 репутации[✔] [✔]400 репутации[✔] [✔]500 репутации[✔] [✖]1000 репутации[✖]
|
|
|
|
[CM]Sivka |
Дата: Пятница, 28.08.2015, 02:28 | Сообщение # 5
|
Боец
Сообщений: 55
Статус: Offline
|
Все делаю, как написано не получается компилировать помоги вот вк: http://vk.com/b.paui
|
|
|
|
Pavel-[CM] |
Дата: Вторник, 24.05.2016, 18:41 | Сообщение # 6
|
Боец
Сообщений: 61
Статус: Offline
|
У меня не получается помогите добрые люди!
|
|
|
|
[CM]Kingster |
Дата: Понедельник, 20.06.2016, 13:53 | Сообщение # 7
|
Боец
Сообщений: 245
Статус: Offline
|
Pavel-[CM], ++
Пользователь Cheat - Master уже 400 дней.
Я в Контакте - vk.com/buddy_fly
|
|
|
|
GlaroX |
Дата: Четверг, 24.11.2016, 03:00 | Сообщение # 8
|
Боец
Сообщений: 201
Статус: Offline
|
Отличный разбор немного изучаю!
|
|
|
|