假设我有一个Animal
抽象类和三个扩展Dog
类的Cat
,Bear
和Animal
类。 Animal
类有抽象方法getDescription
。 Dog
类有一个方法getNumberOfHomeworksEaten
,但Cat
和Bear
没有。假设我有一个装饰器YellowStripes
,BlueStripes
,GreenStripes
,它们都扩展Animal
类并装饰getDescription
方法。如果我用装饰器装饰Dog
,Cat
和Bear
:
Animal dog = new Dog();
dog = YellowStripes(dog);
dog = BlueStripes(dog);
dog = GreenStripes(dog);
Cat cat = new Cat();
//decorate cat
Bear bear = new Bear();
//decorate bear
如何访问getNumberOfHomeworksEaten
的{{1}}方法?由于dog
和getNumberOfHomeworksEaten
没有该方法,因此在每个装饰器中设置Cat
是没有意义的。
答案 0 :(得分:1)
如果您将dog
投射到Dog
,您就可以使用此方法。
Animal animal = new Dog();
animal = YellowStripes(animal);
animal = BlueStripes(animal);
animal = GreenStripes(animal);
Dog dog = (Dog) animal;
dog.getNumberOfHomeworksEaten();