Полимофизм и расширяемость

В следующем примере приведение к базовому типу происходит в выражении:

Stone s1 = new White();

Stone s2 = new Black();

Базовый класс Stone предоставляет общий интерфейс для всех наследников. Порожденные классы перекрывают эти определения для обеспечения уникального поведения.

// пример # 7 : полиморфизм : StoneRandom.java

class Stone {

public void add() {/*пустая реализация*/}

}
class
White extends Stone {

public void add() {

System.out.println("добавлен белый камень");

}

}
class
Black extends Stone {

public void add() {

System.out.println("добавлен черный камень ");

}

}
public class
StoneRandom {

public static Stone randStone() {

//if((int)(Math.random() * 2)==0) return new Black();

//else return new White();//как альтернативный вариант

switch((int)(Math.random() * 2)){

case 0: return new Black();

case 1: return new White();

default: return null;

}

}

public static void main(String[] args) {

Stone[] s = new Stone[10];

for(int i = 0; i < s.length; i++)

/* заполнение массива камнями */

s[i] = randStone();

for(int i = 0; i < s.length; i++)

s[i].add();// вызов полиморфного метода

}

}

}

Главный класс StoneRandom содержит static метод randStone(), который возвращает ссылку на случайно выбранный объект подкласса класса Stone каждый раз, когда он вызывается. Приведение к базовому типу производится оператором return, который возвращает ссылку на Black или White. Метод main() содержит массив из ссылок Stone, заполненный вызовами randStone(). На этом этапе известно, что имеется некоторое множество ссылок на объекты базового типа и ничего больше (не больше, чем знает компилятор). Kогда происходит перемещение по этому массиву, метод add() вызывается для каждого случайным образом выбранного объекта.

Если понадобится в дальнейшем добавить систему, например класс Green, то это потребует только переопределения соответствующих методов и добавления одной строки в код метода randStone(), что делает систему легко расширяемой.








Дата добавления: 2015-04-05; просмотров: 910;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.