我被困在一个问题。 我的问题是这样的。 我有一个超类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