1

問題が発生しました。私の問題は次のようになります。スーパークラス Animal と 2 つのサブクラス Human And Bird があります。Flyable Interface に基づいてクラス Human と Bird の両方の実装を提供するスーパー クラス Animal に fly メソッドがあります。

私のAnimalクラスは次のようになります。

public class`Animal{

    public Flyable flyable;

    public void fly()
    {
        flyable.fly();
    } 

 } 

ヒューマンクラスはこんな感じ

class Human extends Animal {

  Flyable flyable;

  public Human()
  {
   flyable = new CantFly();
  }

}

バードクラスはこんな感じ

class Bird extends Animal {

      Flyable flyable;

      public Bird()
      {
       flyable = new FlyHigh();
      }

    }

インターフェイスは以下のとおりです

public interface Flyable {
   public void fly();
}

public class CantFly implements Flyable{

    @Override
    public void fly()
    {
    Sysout("cant fly");
    }

電話すると

Animal me = new Human();
me.fly();

それは私に NullPointerException を与えます

ここで何が欠けていますか?
私は仮定していた。new Human() を呼び出しているので、スーパークラス Animal で Flyable インターフェイスを初期化します。私が間違っている?

メソッドの設計を変更することで、この問題を解決しました。
fly(Flyable flyable). だから私はその設計ソリューションを望んでいません。結果のリストを提供するアプリの検索アルゴリズムを実装していたときにこの問題に直面したことを覚えていますが、リスト項目には異なる
UI、
異なる End URL への https 呼び出し、
JSON の解析、
異なる POJO クラスへのマッピングがあります。
悲しいことに、私が言及した別のアプローチでその問題を解決しなければなりませんでした。

4

1 に答える 1