2016-07-22 8 views
1

これは簡単な質問ですが、答えはわかりません。まず第一に、これのようなことが可能ですか?サブクラス内のスーパークラスのメソッドをオーバーライドせずに使用できますか?

public class Entity { 


public void sayHi() { 
     System.out.println(“Hi there!”); 
    } 
} 

public class Person extends Entity { 
    public void sayHi() { 
     System.out.println(“I’m a person!”); 
    } 
} 

プリントアウトは次のようになります。私は人です! これは単なる例ですが、これは可能ですか?もしそうなら、どうすればいいですか?このため、実際のプリントアウトは「私は人です!」となります。人のsayHi()メソッドは "Hi There!"という独自のプリントアウトを持たなければならないでしょうか?これが機能するためには?

ご不明な点がございましたら、コメントをお寄せください。私は最善を尽くします。ありがとう。

+0

利用者の '' sayHi() 'で' super.sayHI() ' ' – emotionlessbananas

答えて

5

はい、サブクラスのメソッドからスーパークラスのメソッドを呼び出すだけです。

The Java™ Tutorials - Using the Keyword superを参照してください。

public class Entity { 
    public void sayHi() { 
     System.out.println("Hi there!"); 
    } 
} 
public class Person extends Entity { 
    @Override 
    public void sayHi() { 
     super.sayHi(); 
     System.out.println("I’m a person!"); 
    } 
} 
+0

別名「*デコレータパターン*」(https://en.wikipedia.org/wiki/Decorator_pattern)。 – Bohemian

+0

@アンドレアスありがとう!私は単純な答えがあることを知っていた。 @ Overrideは必要ですか? –

+0

'@ Override' *が必要ですか?*いいえ、**大いに**励まされます。なぜなら、それはコーディングエラーを捕捉する助けとなるからです。 – Andreas

1
 public class Entity { 
     public void sayHi() { 
      System.out.print("Hi there!"); 

     } 
    } 
    public class Person extends Entity { 
     super.sayHi(); 
System.out.print("I’m a person!"); 
    } 

I think this may helps you. 
+0

'プリントアウトは次のようになります:HI there!私は人です '慎重に質問をお読みください – emotionlessbananas

+0

こんにちは@AsteriskNinja、私はちょうど一度見て、コードを更新しました。 – user4342532

+0

@ Root_1989ありがとう!これは完全に機能します。 –

0

アンドレアスのanwserについては、Javaのリフレクションによって 'スーパー' を追加せずに方法があります:

public class Entity { 
    public void sayHi() { 
     System.out.println("Hi there!"); 
    } 
} 

public class Person extends Entity { 
    public void sayHi() { 
     System.out.println("I’m a person!"); 
    } 
} 

public class Tester { 
    public static void main(String[] args) throws Throwable { 
     Person x = new Person(); 
     MethodHandle h1 = MethodHandles.lookup().findSpecial(x.getClass().getSuperclass(), "sayHi", 
       MethodType.methodType(void.class), 
       x.getClass()); 

     h1.invoke(x); 
     x.sayHi(); 
    } 
} 
+0

お返事ありがとうございます!この方法は他の方法よりも複雑なので、私はそれを使用するとは思わないが、後でそれを念頭に置いています。 –

関連する問題