3
public class Test  {  

    public static void main(String args[]){
        Test t = new Test();
        t.inner();

    }
    public final void print() { 
        System.out.print("main"); 
    }      

    public void inner() {       
        class TestInner {           
            void print(){
                System.out.print("sub");                
            }

        }
        TestInner inner =new TestInner();
        inner.print();
        print();
    }
}

出力:サブメイン

質問 : クラス Test のメソッド print() は final であり、ローカル クラスにアクセスできますが、それでもローカル クラスは print() メソッドを再度定義できます。

スーパークラスで private final x() を宣言すると、サブクラスではアクセスできないため、サブクラスで x() を定義できます。

スーパークラスで public final x() を宣言すると、サブクラスでアクセスできるため、サブクラスで x() を定義できません。

誰でも説明できますか?

4

3 に答える 3

6

内部クラスはfinalメソッドをオーバーライドしていません。

内部クラスは、外部クラスのメソッドをオーバーライドできるように、外部クラスを拡張する必要があります。

2 つのクラスは別々であり、外側のクラスに内側のクラスが含まれていることを除けば、互いに関連はありません。

于 2012-12-22T18:43:39.433 に答える
2

TestInner クラスは Test クラスを拡張しないため、別個の独自の名前空間があります。

Test クラスの print メソッドを上書きするわけではありません。

于 2012-12-22T18:44:33.523 に答える
0

内部クラスは最終メソッドをオーバーライドしていません。

内部クラスは、外部クラスのメソッドをオーバーライドできるように、外部クラスを拡張する必要があります。

2 つのクラスは別々であり、外側のクラスに内側のクラスが含まれていることを除けば、互いに関連はありません。

于 2013-07-21T03:49:39.920 に答える