1

これは、 「Javaアクセス修飾子とオーバーライド」という質問のフォローアップです。ただし、前者は一般的にJavaメソッドを扱います。なぜJavaフィールドの柔軟性があるのですか?継承されたクラスでは、それらを尊重して可視性を狭めたり広げたりできますが、「overridden」または「hidden」メソッドではできません。

4

2 に答える 2

3

最初からフィールドをオーバーライドすることはありません。常にフィールドを非表示にしています。フィールドは多態的ではありません...つまり、次のように書くと:

Superclass x = new Subclass();
System.out.println(x.field);

と の両方でというフィールドSuperclassを宣言すると、コンパイラが「見る」ことができるのはそれだけなので、とにかく常にスーパークラスを使用します。Subclassfield

個人的には、とにかく変数を非公開にしようとしています...

于 2011-07-28T21:22:56.633 に答える
2

Java フィールドの柔軟性が高い理由

別のクラスのフィールドを拡張してプライベートにすることはできません。サブクラスで新しいフィールドを作成すると、スーパークラスのフィールドが非表示になります。

class Base {
    protected int x;
}

class Ext extends Base {
    private int x; // not the same as Base.x
}
于 2011-07-28T21:24:48.850 に答える