|
Java. объектно-ориентированное программирование с интерфейсамиТо есть в данном случае класс - это техническое средство для упаковки реализации. Небольшой, относительно автономный кусочек программы (данные + код). И за пределами того места, где происходит упаковка, он никому не нужен. Другое дело, если этот кусочек повторяется регулярно. Тогда имеет смысл сделать его доступным из разных частей программы. Таким образом, класс нужен только для повторного использования. Кроме того, в большой программе выделение кода в классы улучшает ее читаемость. Реально анонимные классы мне попадались нечасто. Но дело не в том, где упакована реализация - в обычном классе или в анонимном. Важно понимать, чем различаются роль класса и роль интерфейса. 3. Наследование типа Назвался груздем - полезай в кузов. Наследование типа и полиморфизм обеспечиваются наследованием интерфейса и ничем иным. Простой пример: /* TestShips.java ---------------------------------------------------- (8< * * Наследование интерфейсов и полиморфизм * * -------------------------------------------------------------------- */ import java.util.ArrayList; interface Ship { void runTo(String s); } interface WarShip extends Ship { void bombard(); } interface Transport extends Ship { void loadTroops(int n); void landTroops(); } public class TestShips { public static void main(String[] args) { ArrayList ships = new ArrayList(); for(int i = 0; i < 3; i++) ships.add(new Transport() { private int troopers; public void runTo(String s) { System.out.println("Транспорт направляется в "+s+"."); } public void loadTroops(int n) { troopers = n; } public void landTroops() { System.out.println((new Integer(troopers)).toString()+" отрядов десантировано."); } } ); for(int i = 0; i < 2; i++) ships.add(new WarShip() { public void runTo(String s) { System.out.println("Корабль направляется в "+s+"."); } public void bombard() { System.out.println("Корабль бомбардирует цель."); } } ); for(int i = 0; i < 3; i++) ((Transport)ships.get(i)).loadTroops(i+5); for(int i = 0; i < ships.size(); i++) ((Ship)ships.get(i)).runTo("Вражий Порт"); for(int i = 0; i < 3; i++) ((Transport)ships.get(i)).landTroops(); for(int i = 3; i < ships.size(); i++) ((WarShip)ships.get(i)).bombard(); // Run-time error: java.lang.ClassCastException // ((Transport)ships.get(4)).landTroops(); // Run-time error: java.lang.ClassCastException // ((WarShip)ships.get(1)).bombard(); // Compile-time error: cannot resolve symbol // ((Ship)ships.get(1)).landTroops(); // ((Ship)ships.get(4)).bombard(); } } // (8< Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Другие статьи по теме: - Java-приложение: заглянем внутрь- практическое введение в программирование на javascript - Java. объектно-ориентированное программирование с интерфейсами - Java: управление ресурсами - возможности языка java |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |