class Base {
public void sayHi() {
System.out.println("Hi");
}
}
class ChildOne extends Base {
public void sayBye() {
System.out.println("Bye-1");
}
}
class ChildTwo extends Base {
public void sayBye() {
System.out.println("Bye-2");
}
}
public class MainClass {
public static <T extends Base> void genericFunction(T child) {
child.sayBye();
}
public static void main(String[] args) {
ChildOne childOne = new ChildOne();
ChildTwo childTwo = new ChildTwo();
genericFunction(childOne);
genericFunction(childTwo);
}
}
このコードが間違っている、私は一例で私の意図を説明してみましょう。しかし私の意図は、子クラス(既にプロジェクト内に存在するいくつかのクラス)で、それらの間に同様のプロパティを持ち、基本クラスを拡張し、sayBye()メンバー関数を持っています。
すべての子クラスをパラメータとして汎用関数に渡し、メンバー関数sayBye()を呼び出す方法はありますか(この例のように)?
いいえ、現在のコード構造を使用していません。 2つの子の「sayBye」メソッドは、お互いに全く関係がありません。彼らが同じ名前を持っているという事実は重要ではありません、それはただの "偶然"です。関数をBaseクラスに移動し、抽象クラスにし、それをChildクラスに実装する必要があります。 – luk2302
なぜ彼らはインターフェイスを実装していないのですか? – MrHug
'sayBye()'メソッドは 'ChildOne'とそのサブクラスで利用できます。署名を 'void genericFunction(ChildOne child)'に変更します。または、@ MurHugが示唆しているように、必要なメソッドをインターフェイスに配置します。 – Strikegently