私は次の2つのクラスを持っていると仮定しましょう
_public class alpha {
public alpha(){
//some logic
}
public void alphaMethod1(){
//some logic
}
}
public class beta extends alpha {
public beta(){
//some logic
}
public void alphaMethod1(){
//some logic
}
}
public class Test extends beta
{
public static void main(String[] args)
{
beta obj = new beta();
obj.alphaMethod1();// Here I want to call the method from class alpha.
}
}
_
タイプbetaの新しいオブジェクトを開始する場合、ベータではなくクラスalphaにある_alphamethod1
_ロジックを実行するにはどうすればよいですか? super().alphaMethod1()
のみを使用できますか?<-これが可能かどうか疑問に思います。
EclipseのオートタイプIDEは、クラスalpha
またはクラスbeta
のいずれかから_alphamethod1
_を選択するオプションを提供しています。
できるよ:
super.alphaMethod1();
super
は親への参照ですが、super()はコンストラクターであることに注意してください。
単にsuper.alphaMethod1();
を使用してください
Javaのスーパーキーワード を参照してください
ベータのオブジェクトを使用してアルファのalphaMethod1()を呼び出すことはできませんが、2つの解決策があります。
解決策1:ベータ版のalphaMethod1()
からalphaのalphaMethod1()
を呼び出す
_class Beta extends Alpha
{
public void alphaMethod1()
{
super.alphaMethod1();
}
}
_
または次のようなベータの他の方法から:
_class Beta extends Alpha
{
public void foo()
{
super.alphaMethod1();
}
}
class Test extends Beta
{
public static void main(String[] args)
{
Beta beta = new Beta();
beta.foo();
}
}
_
ソリューション2:アルファのオブジェクトを作成し、アルファのalphaMethod1()
を呼び出します
_class Test extends Beta
{
public static void main(String[] args)
{
Alpha alpha = new Alpha();
alpha.alphaMethod1();
}
}
_
Superを使用してマザークラスからメソッドを呼び出すことは可能ですが、これはおそらく設計上の問題があることを意味します。おそらくB.alphaMethod1()
はAのメソッドをオーバーライドしてB.betaMethod1()
と呼ばれるべきではありません。
状況に応じて、次のようなコードロジックを配置できます。
public void alphaMethod1(){
if (something) {
super.alphaMethod1();
return;
}
// Rest of the code for other situations
}
このように、必要な場合にのみAのメソッドを呼び出し、クラスユーザーには表示されません。
子クラスオブジェクトを作成すると、そのオブジェクトには親クラスのすべての機能があります。ここで、Super()は、親の親の施設です。
そのときにsuper()を記述すると、親のデフォルトコンストラクターが呼び出されます。スーパーを書く場合も同じです。
このキーワードは、親にアクセスするためのスーパーキーWord機能と同じ現在のオブジェクトを参照します。