Разработка с наследованием и композицией

При разработке начинать нужно с композиции. Композиция позволяет динамически выбрать тип. Динамическое изменение поведения объекта с помощью композиции.

class Actor {

public void act () {}

}

class HappyActor extends Actor {

public void act () { System.out.printl (“HappyActor”);}

}

class SadActor {

public void act (){ System.out.println (“SadActor”);}

}

class Stage {

private Actor actor = new HappyActor ();

public void change () {actor = new SadActor ();}

public void performPlay () {actor.act ();}

}

public class Transformogrify {

public static void main (String [] args) {

Stage stage = new Stage ();

Stage.performPlay ();

Stage.change ();

Stage.performPlay ();

}

}

Напечатается: HappyActor

SadActor

Ссылка на Actor присоединяется к разным типам во время выполнения программы (динамически меняется поведение объекта).Это - паттерн «Состояние» (State).

Нисходящее преобразование типов

(downcasting)

Это преобразование от суперкласса к подклассу. Для восстановления типа после upcasting. Если нужно вызвать методы, которых нет в базовом классе.

class Useful {

public void f() {}

public void g() {}

}

class MoreUseful extends Useful {

public void f() {}

public void g() {}

public void u() {}

}

public class UsefulsTest {

public static void main (String [] args) {

Useful [] x = { new Useful (), new MoreUseful ()};

x[0].f(); x[1].g();

// x[1].u()-компилятор не допустит

((MoreUseful) x[1]).u();// OK, downcasting

((MoreUseful) x[0]).u();// исключение ClassCastException

}

1.downcasting должен делаться явно.

2. Объект должен быть того класса, к которому делается приведение. Иначе- исключение ClassCastException.

Обычно делают так

if (x[1] instanseof MoreUseful) ((MoreUseful) x[1]). u());

instanseof оператор проверки типов. Проверяет, имеет ли его левый операнд тип правого операнда.(Или его суперклассов).

Проверка типов во время выполнения программы –это динамическое определение типов.(RTTI- run-time type identification).

Тема 9

Абстрактные классы и интерфейсы


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: