13

私はJavaが初めてで、非常に基本的な質問があります。

同じパッケージの下に 2 つの親クラスがあります。Animal抽象クラスとMachineクラス。

これで、AnimalAbstract Class に保護されたメソッドが追加されました。クラスが同じパッケージの下にある場合、保護されたメソッドにアクセスできることを認識しています。

クラスでその保護されたメソッドにアクセスできますMachine。問題は..その保護されたメソッドをオーバーライドすることは可能ですか? Animalクラスを拡張せずに。

4

6 に答える 6

34
  • protected - 同じパッケージ内にあるかどうかに関係なく、サブクラスによってオーバーライドできます
  • デフォルト (アクセス修飾子なし) - 両方のクラスが同じパッケージにある場合にのみ、アクセスまたはオーバーライドできます
于 2012-07-24T07:26:50.677 に答える
9

拡張によってのみメソッドをオーバーライドできます。

必要に応じて、保護されたメソッドを匿名サブクラスでオーバーライドできます。例えば

public class Animal {

    protected String getSound() {
        return "(Silence)";
    }

    public void speak() {
        System.out.println(getSound());
    }
}

別のクラスで:

public static void main(String ... args) {

    Animal dog = new Animal() {

        @Override
        protected String getSound() {
            return "Woof!";
        }   
    }

    dog.speak();
}

出力します:

Woof!
于 2012-07-24T07:27:06.023 に答える
2

いいえ、オーバーライドとは、親クラスから動作を継承することを意味し、クラスを拡張しないと不可能です。

public class PClass
{
    protected boolean methodA()
    {
        return true;
    }
}

public class CClass  extends PClass
{
    protected boolean methodA()
    {
        return false;
    }
}

以下のコードを実行してテストします

public static void main(String[] args) 
{

    PClass pc = new CClass();
    System.out.println(pc.methodA());

}

O/p=false

ここでは、の動作をオーバーライドしていますmethodA

于 2012-07-24T07:31:52.133 に答える
0

定義によるオーバーライドは言います。

同じシグネチャ(名前に加えて、そのパラメータの数とタイプ)を持つサブクラスのインスタンスメソッドと、スーパークラスのインスタンスメソッドとしての戻り値タイプは、スーパークラスのメソッドをオーバーライドします。

したがって、スーパークラスを拡張しない場合、メソッドをオーバーライドする方法はありません。

于 2012-07-24T07:46:41.333 に答える
0

Protected は、他のパッケージのサブクラスからのみアクセスできます。同じパッケージ内のクラスは、保護されたメンバーのクラスのサブクラスでなくても、保護されたフィールド、メソッド、およびコンストラクターにもアクセスできます。

Override : 同じシグネチャを持つサブクラスのインスタンス メソッド。

あなたの質問の答え:
しかし、あなたがしたくない場合は、あなた自身のクラスの通常の機能をオーバーライドしないでくださいextends Animal classMachine class

于 2012-07-24T07:53:20.280 に答える
0

メソッドをオーバーライドするには、そのクラスを拡張する必要があります。それがオーバーライドの意味です。スーパークラスと同じシグネチャを持つメソッドを持つことです。

于 2012-07-24T07:28:04.967 に答える