我被困在一個問題。 我的問題是這樣的。 我有一個超類Animal和兩個子類Human和Bird。 我在我的超級動物中有一個飛行方法,它將爲基於可飛行接口的人類和鳥類提供實現。Java界面設計模式情況
我的動物類看起來像這樣。
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
什麼我米在這裏失蹤?
我假設。由於我正在調用新的Human(),它會在超類Animal中初始化Flyable接口。我錯了嗎?
我已經通過改變方法的設計解決了這個問題。
fly(Flyable flyable)。所以我不想那個設計解決方案。 我記得當面向我實現了一個應用程序的https打電話給其他結束的URL的搜索算法,將提供結果,但列表項的列表將有不同的
UI,
,
解析JSON這個問題,
映射到不同的POJO類。
很遺憾,我不得不用我提到的替代方法來解決這個問題。
爲什麼你在父母___和子類中有'flyable'字段?重複應該是什麼意思? – Tom
在超類中調用Flyable接口的方法。並在子類中初始化flyable。你認爲這是錯誤的做法嗎? –
是的,那是錯的。如果您需要父類中的字段,則將初始化傳遞給該類(例如'super(new CantFly());')。 – Tom