拡張クラスの関数を呼び出したい。これはどのように行うことができますか?
class Main{
Function();
}
class Other extends Main{
public void Function() { /* The function code */ }
}
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
には、クラスに含まれていないものに関して、クラスに含まれているものに関して特別な特権Other
はありませんMain
。また、Main
オブジェクトは必ずしもオブジェクトではありませんOther
。Main
したがって、Classのオブジェクトがを呼び出すときの動作を定義する必要がありますFunction()
。あなたはどちらかをすることができます
Function()
します。つまり、クラスのオブジェクトを作成できず、クラスMain
自体Other
を定義Function()
または抽象化する必要があります。Main
であるオブジェクトに対して機能するClassのデフォルト実装を宣言します。Main
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
}
}
Main
抽象クラスとして定義し、サブクラスfunction()
に実装された抽象メソッドとして定義できます。Other
ただし、ある時点で のインスタンスを作成する必要がありますOther
。
class Main {
public void Function() { F2(); }
public abstract void F2();
}
class Other extends Main {
public void F2() { /* code here */ }
}