0

この回答には、次のコードがあります。

//in a main method somewhere
Super instance = new Sub();
instance.method();

//...
public class Super {
    public static void method() {
        System.out.println("Super");
    }
}

public class Sub extends Super {
    public static void method() {
        System.out.println("Sub");
    }
}

これSuperは期待どおりに出力されますが、インスタンスを指定して static を呼び出したいコードがいくつかありますSub.method()。1つの解決策は次のとおりです。

public class Sub extends Super {
    public static void sMethod() {
        Super.sMethod();
        System.out.println("Sub (static)");
    }
    public void method() {
        super.method();
        System.out.println("Sub (instance)");
    }
}

ただし、自明ではない関数本体 (私の場合、パラメーターがクラスに許可されている制限内にあるかどうかを確認しています) では、多くのコードが繰り返されます。これを解決するための適切な設計パターンはありますか? リフレクションはおそらくうまくいくでしょうが、それは最後の手段のように感じます.

もう少し考えてみて、これでよろしいでしょうか?

public class Sub extends Super {
    public static void sMethod() {
        Super.sMethod();
        System.out.println("Sub (static)");
    }
    public void method() {
        Sub.sMethod();
    }
}
4

2 に答える 2

0

クラスレベルのメソッドを呼び出したい場合は、オブジェクトは必要ありません。

Subclass.method();

あなたのコメントを読むには、基本的なオブジェクトの継承が必要で、ポリモーフィズムのアプローチが必要だと思います。

public class Super {
    public  void method() {
        System.out.println("Super");
    }
}

public class Sub extends Super {
    public  void method() {
        System.out.println("Sub");
    }
}
//in a main method somewhere
Super instance = new Sub();
instance.method();

これで、実行時に実行されるメソッドがわかりました。これはコール ポリモーフィズムであり、OOP の主な機能です。

そして、メソッド宣言で何らかの理由でまだ静的メソッドが必要な場合は、たとえば呼び出します

public class SubClass extends SuperClass{

public static void method2(){
  //do Something
}

@Override
public void method(){
  Subclass.method2();
}

}
于 2013-07-05T00:42:05.113 に答える