Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Известно, что растения и животные принадлежат к разным царствам. Основным различием между ними является то, что растения поглощают неорганические элементы, а животные питаются органическими веществами. Животные делятся на две большие группы — птицы и млекопитающие. Предположим, что на основе этой классификации построено дерево наследования, в каждом классе определены элементы с учетом наследования от родительских классов.
Рассмотрим такое свойство живого организма, как способность питаться насекомыми. Очевидно, что это свойство нельзя приписать всей
^К1дИя 8____________________________________________ Объектная модель в Java
_
группе птиц, или млекопитающих, а тем более растений. Но существуют ^дставители каждой из названных групп, которые этим свойством обладают, - для растений это росянка, для птиц, например, ласточки, а для млекопитающих - муравьеды. Причем, очевидно, "реализовано" это свойство у каждого вида совсем по-разному.
Можно было бы объявить соответствующий метод (скажем, consumelnsect(lnsect)) у каждого представителя независимо. Но если задача состоит в моделировании, например, зоопарка, то однотипную процедуру _ кормление насекомыми - пришлось бы описывать для каждого вида отдельно, что существенно осложнило бы код, причем без какой-либо пользы.
Java предлагает другое решение. Объявляется интерфейс InsectConsumer:
public interface InsectConsumer { void consumelnsect(lnsect i);
}
Его реализуют все подходящие животные и растения:
// росянка расширяет класс растение
public class Sundew extends Plant implements InsectConsumer { public void consumelnsect(lnsect i) {
}
}
// ласточка расширяет класс птица
public class Swallow extends Bird implements InsectConsumer { public void consumelnsect(lnsect i) {
}
}
// муравьед расширяет класс млекопитающее public class AntEater extends Mammal implements InsectConsumer {
public void consumelnsect(lnsect i) {
}
}
В результате в классе, моделирующем служащего зоопарка, можно объявить соответствующий метод:
// служащий, отвечающий за кормление, расширяет класс служащий class FeedWorker extends Worker {
// с помощью этого метода можно накормить
// и росянку, и ласточку, и муравьеда
public void feedOnlnsects(lnsectConsumer consumer) {
consumer.consumelnsect(insect);