1

私が持っているとしましょう:

public abstract class Animal {
    // SLF4J
    private Logger logger = LoggerFactory.getLogger(Animal.class);

    // ...etc.

    public void setLogger(Logger logger) {
        this.logger = logger;
    }

    public Logger getLogger() {
        return this.logger;
    }
}

と:

public abstract class Dog extends Animal {
    // SLF4J
    private Logger logger = LoggerFactory.getLogger(Dog.class);

    // ...etc.

    public void setLogger(Logger logger) {
        this.logger = logger;
    }

    public Logger getLogger() {
        return this.logger;
    }
}

次に、次のコードを実行すると:

Dog d1 = new Dog();
Animal a1 = new Dog();
  1. d1「犬」ロガーまたは「動物」ロガーを取得しますか?
  2. a1「犬」ロガーまたは「動物」ロガーを取得しますか?
  3. Dog と Animal が常に正しいロガーを取得できるように、このコードを記述するためのより良い/クリーン/安全な方法はありますか?
4

1 に答える 1

0

d1a1には両方のタイプのロガー((Animal)d1).loggerがあり、Animal.classロガーとd1.loggerになりますDog.class。はプライベート フィールドである((Animal)d1).loggerため、実際には Animal クラスのコードの外側を参照できないことに注意してください。Animal.logger

実行a1時の型がDog

于 2013-08-31T02:12:15.187 に答える