拡張クラスの関数を呼び出したいと思います。これはどうすればできますか?拡張クラスの呼び出し関数
class Main{
Function();
}
class Other extends Main{
public void Function() { /* The function code */ }
}
拡張クラスの関数を呼び出したいと思います。これはどうすればできますか?拡張クラスの呼び出し関数
class Main{
Function();
}
class Other extends Main{
public void Function() { /* The function code */ }
}
あなたは抽象クラスとしてMain
を定義し、Other
サブクラスで実装抽象メソッドとしてfunction()
を定義することができます。ただし、ある時点でOther
のインスタンスを作成する必要があります。
私は以下のインスタンスを使用しました: その他のインスタンス= newその他(); Other.Function() メインクラスに戻りました。それは機能を見つけることができないと言います。私はこのことがどういうふうに誤解していると思います。私はそれについてたくさんの読書をしました。あなたはこれを達成する方法についてもう少しフィードバックをお願いできますか? – user1042304
完全なソースを提供できますか? Mainは 'Other'によって実装されているだけなので、' Other'Function()ではなく、メインクラスで 'Function()'を呼び出すべきでしょう。 –
class Main {
public void Function() { F2(); }
public abstract void F2();
}
class Other extends Main {
public void F2() { /* code here */ }
}
あなたはそれとは逆です。私はメインクラスが他のクラスで書かれた関数を呼び出すようにします。 – user1042304
コメントに基づいて更新されました。 –
@ user1042304:これは絶対にしないでください。元の質問への私のコメントを見てください。より良い助けを得るには、あなたが解決しようとしている全体的な問題を含めて、それをどのように解決しようとしているのかを含めて詳細を教えてください。 –
public class BaseCls {
void function() {
System.out.println("Base");
}
}
public class ExtCls extends BaseCls {
void function() {
super.function();
System.out.println("ExtCls");
}
public static void main(String args[]) {
new ExtCls().function();
}
}
クラスMain
は、クラスMain
にないクラスOther
にあるものに関しては、特別な権限を持っていません。また、Main
オブジェクトは必ずしもOther
オブジェクトである必要はありません。したがって、クラスMain
のオブジェクトがFunction()
と呼び出されたときの動作を定義する必要があります。あなたはどちらか
Function()
を定義するかを強制されるクラスMain
とクラスOther
のオブジェクトを作成することはできませんつまり、抽象的であることをFunction()
を宣言することができ、またはMain
でのデフォルトの実装を宣言しますMain
sであり、Other
ではないオブジェクトの場合。いずれの場合も、状況によっては受け入れ可能です。あなたの状況に適しているものを選択するのに役立つ場合は、より詳細な情報を提供する必要があります。
例:
class Main {
public abstract void Function();
private void SomeFunction() {
Function();
}
}
class Other extends Main {
public void Function() { /* code here */ }
}
または
class Main {
public void function() { /* default code here, can be empty */ };
public void someFunction() {
function();
}
}
class Other extends Main {
public void function() { /* code here */ }
}
class Example {
public void example() {
Main main = new Main();
Other other = new Other();
main.function(); // call the function defined in class Main
other.function(); // call the function defined in class Other
main.someFunction(); // call Main.someFunction, which calls Main.function
other.someFunction(); // call Main.someFunction, which calls Other.function
}
}
私はあなたの2番目のオプションが好きでしたが、Function()は拡張クラスによって変更されていません。 – user1042304
@ user1042304、両方の方法で使用することはできません。拡張クラスで定義されている関数を呼び出すか、そうでない関数を呼び出すかのどちらかです。拡張クラスが関数を変更していない場合、どのような意味で「拡張クラスの関数」ですか? –
拡張クラスで作成した関数を呼び出す必要があります。しかし、ここでの提案は、Function()をMainクラスで定義された空として表示し、次にExtended Classで再び定義することです。 – user1042304
あなたは 'super.Function()'、すなわち、スーパーのメソッドを呼び出すために、おそらく意味しますか?あなたの質問は非常に曖昧であり、重要な細部をたくさん残しています。私たちが推測する必要がないように物事を明確にすることはできますか? –
あなたのコメントについては、 'あなたはそれとは逆の方法をしています。私は、メインクラスが他のクラスで書かれた関数を呼びたいと思っています。'いいえ、そうではありません。 **決して**子クラスに依存することはありません。コードでどのようにこの問題を解決しようとしているかを教えてください。解決しようとしている全体的な問題を教えてください。私は、継承が正しい解決策に関与していないと考えています。 –