|
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 сказано: декларация анонимного класса автоматически извлекается компилятором из выражения создания экземпляра класса. Т.е. авторы языка воспользовались принципом чайника и привели задачу создания "самоопределенного" объекта к уже решенной. Другими словами, обычно сначала декларируется класс, а затем порождается его экземпляр. С анонимным классом все наоборот - сначала описывается экземпляр, а потом под него подгоняется класс. Реинжиниринг называется. :) Можно сказать, что анонимный класс нужен для того, чтобы узаконить существование созданного объекта. Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Другие статьи по теме: - почтовая программа - своими руками!- возможности языка java - практическое введение в программирование на javascript - Java: управление ресурсами - поисковая оптимизация как вид деятельности |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |