保護された監視可能なフィールドを継承するクラスを装飾したいとしましょう。上記のスーパークラスの機能を拡張できるように、その保護された変数にアクセスするにはどうすればよいですか?
以下のより具体的な例を参照してください。
クラス SuperSuper - 匿名オブザーバーを最初に含むクラス
package javafxapplication1;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class SuperSuper extends Application {
protected Button button = new Button();
@Override
public void start(Stage stage) throws Exception {
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
doSomething();
}
});
}
public String doSomething() {
return "1";
}
}
Class Super - 匿名オブザーバーを継承するスーパークラス
package javafxapplication2;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafxapplication1.SuperSuper;
public class Super extends SuperSuper {
@Override
public void start(Stage stage) throws Exception {
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
doSomething();
}
});
}
@Override
public String doSomething() {
return "2";
}
}
クラス SuperDecorator - スーパーのデコレータ クラス
package javafxapplication3;
import javafxapplication2.Super;
class SuperDecorator extends Super {
Super zuper;
public SuperDecorator(Super zuper){
this.zuper = zuper;
}
@Override
public String doSomething() {
return zuper.doSomething()+"3";
}
//What should I put here in order to make zuper's button print 3?
}