Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


Java. объектно-ориентированное программирование с интерфейсами


/* TestAnimal.java --------------------------------------------------- (8< * * Образец бесклассовой реализации * * -------------------------------------------------------------------- */ import java.util.ArrayList; interface Animal { void giveSignals(); void goHome(); String getTitle(); String getNick(); } interface Command { void exeCommand(Animal an); } interface Ranch { void add(Animal an); void visitAll(Command cmd); } public class TestAnimal { public static void main(String[] args) { Ranch myRanch = new Ranch() { private ArrayList ranchAnimals = new ArrayList(); public void add(Animal a) { ranchAnimals.add(a); } public void visitAll(Command cmd) { for(int i = 0; i < ranchAnimals.size(); i++) cmd.exeCommand((Animal)ranchAnimals.get(i)); } }; // end of new Ranch() // add animals myRanch.add(new Animal() //dog { public void giveSignals() { System.out.println("Гав-гав"); } public void goHome() { System.out.println("Бежит в будку"); } public String getTitle() { return new String("собака"); } public String getNick() { return new String("Блэк"); } }); // end of add new Animal dog myRanch.add(new Animal() // sheep { public void giveSignals() { System.out.println("Бе-е"); } public void goHome() { System.out.println("Идет в загон"); } public String getTitle() { return new String("овца"); } public String getNick() { return new String(""); } }); // end of add new Animal sheep myRanch.add(new Animal() // another sheep { public void giveSignals() { System.out.println("Бе-е"); } public void goHome() { System.out.println("Идет в загон"); } public String getTitle() { return new String("овца"); } public String getNick() { return new String(""); } }); // end of add new Animal another sheep // gives signals System.out.println("n<<<<<<< Все подали голос >>>>>>>>>n"); myRanch.visitAll(new Command() { public void exeCommand(Animal a) { System.out.print(a.getTitle()+" "+a.getNick() + " говорит: "); a.giveSignals(); } }); // go to Home System.out.println("n<<<<<<< Все домой! >>>>>>>>>n"); myRanch.visitAll(new Command() { public void exeCommand(Animal a) { System.out.print(a.getTitle()+" "+a.getNick() + " идет домой: "); a.goHome(); } }); } } // (8<Использование класса Sheep позволило бы сократить текст программы. Никаких других преимуществ введение этого класса не дает. Для остальных объектов определение соответствующих классов не дает ничего.

Результат выполнения программы:

<<<<<<< Все подали голос >>>>>>>>> собака Блэк говорит: Гав-гав овца говорит: Бе-е овца говорит: Бе-е <<<<<<< Все домой! >>>>>>>>> собака Блэк идет домой: Бежит в будку овца идет домой: Идет в загон овца идет домой: Идет в загон

Кто-нибудь скажет, что в приведенном примере использованы анонимные классы и будет прав.

Но что такое анонимный класс? В спецификации Java сказано: декларация анонимного класса автоматически извлекается компилятором из выражения создания экземпляра класса. Т.е. авторы языка воспользовались принципом чайника и привели задачу создания "самоопределенного" объекта к уже решенной. Другими словами, обычно сначала декларируется класс, а затем порождается его экземпляр. С анонимным классом все наоборот - сначала описывается экземпляр, а потом под него подгоняется класс. Реинжиниринг называется. :)

Можно сказать, что анонимный класс нужен для того, чтобы узаконить существование созданного объекта.

Другие статьи по теме:

- почтовая программа - своими руками!
- возможности языка java
- практическое введение в программирование на javascript
- Java: управление ресурсами
- поисковая оптимизация как вид деятельности


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2024 © SMTI.RU
Главная страница | Связаться с нами