1

私はこれらの3つのクラスを持っているとしましょう

class Human
  public void eat()

class Lawyer extends Human
  public void beEvil()

class Murderer extends Human
  public void beEvil()
  public void kill()

今、私はアクションのハンドラーを持っています、そして私は自分が何であるかを知らずにアクションを処理したいと思います。したがって、たとえば:

handleBeEvil(Human human)
{
    ..
    human.beEvil(); //wont obviously work
    ..
}

たとえば、as3では、

handleBeEvil(Object human)
{
   human.beEvil(); //would pass compiler, work or break runtime
}

Javaでこれを達成するための最良の方法は何ですか?すべてのデクレレーションをヒューマンクラスに入れないようにしたいと思います。

4

1 に答える 1

2

インターフェイスを作成し、両方Lawyerを用意してMurderer実装します(つまりclass Lawyer extends Human implements Evil):

interface Evil {
    void beEvil();
}

次に、あなたの方法は

... handleBeEvil(Evil human)
{
    ..
    human.beEvil();  // now this will work
    ..
}
于 2012-12-07T23:13:25.337 に答える