3

AJavaにクラスがあり、いくつかの保護されたメソッドがあります。次に、それらの保護されたメソッドをオーバーライドできるAクラスがBあります。次に、クラスからのクラスを持つ機能が必要ですが、クラスはの保護されたメソッドを呼び出すことができないはずです。Javaでそれを行う方法はありますか?親のクラスのメソッドをオーバーライドして、それらをfinalにするだけですか?igextendsABCextendsBCA

public class A()
{
     protected void somemethod();
     protected int somevariable;
}

public class B() extends A
{
    @Override
    final protected void somemethod();
        //How do I make some variable final or not accessible to my children?
    }

    public class C() extends B
    {
        //Now I cannot override somemethod! Is that right?
    }
}
4

3 に答える 3

3

protectedいいえ、子クラスが親のメソッドを呼び出すのを防ぐことはできません。これを実現するには、メソッドの可視性を下げる必要がありますが、これは許可されていません。finalクラスでメソッドを作成Bするということは、どのサブクラスでもオーバーライドできないことを意味するだけです。

子クラスのメソッドの呼び出しを禁止したいという事実は、protected私には設計上の問題のようです。クラス階層全体を確認し、クラスの責任をより適切に分離して、通常許可されること(メソッドの呼び出し)を妨げなければならない状況に陥らないようにすることをお勧めしますprotected

于 2012-12-17T19:48:49.167 に答える
1
//How do I make some variable final or not accessible to my children?

このために、変数をプライベートおよびファイナルにすることができます:

private final int COUNT = 100;

プライベートアクセサーは、変数COUNTが子クラスによってアクセスされるのを防ぎます。

于 2012-12-17T19:36:05.823 に答える
1

Bが保護されたメソッドをオーバーライドして、CがAで実装されたメソッドにアクセスできないようにすれば十分です。その場合、CはBで実装されたメソッドにのみアクセスできます。Javaを見てください祖父母のメソッドを呼び出す方法は?

于 2012-12-17T20:00:07.933 に答える