class Test {
public static final String FOO = "foo";
public static void main(String[] args) {
Test b = new Test();
Sub s = new Sub();
System.out.print(Test.FOO); /* Prints foo */
System.out.print(Sub.FOO); /* Prints bar */
System.out.print(b.FOO); /* Prints foo */
System.out.print(s.FOO); /* Prints bar */
System.out.print(((Test)s).FOO); /* Prints foo but Why?*/
} }
class Sub extends Test {public static final String FOO="bar";}
私が継承について読んでいた
を使用するために、親クラスにサブクラスのオブジェクトをキャストし、私はあなたが親クラスにSUBクラスオブジェクトをキャストした場合にもいることが分かったとすることを使用してオーバーライドされたメソッドを呼び出そうオブジェクト(here参照)では、SUBCLASSメソッドが呼び出されます。FINALフィールドを継承し、それを
しかし、ここで私の質問では、オブジェクトの種類がClass Subの場合でも親クラスの変数値が印刷されています。
使用 '最終static'変数をオーバーライドすることはできません – Jens
はい、あなたは正しいです。しかし、なぜ最後のSystem.out.printはbarでない "foo"を表示しますか? – user3196835
親クラスの値であるため、オーバーライドできません – Jens