Я застрял в проблеме. Моя проблема выглядит так. У меня есть надкласс Animal и два подкласса Human And Bird. У меня есть метод fly в моем суперклассе Animal, который обеспечит реализацию как для класса Human, так и для Bird на основе интерфейса Flyable.
Мой класс 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(), он инициализирует интерфейс Flyable в суперклассе Animal. Я ошибся?
Я решил эту проблему, изменив дизайн метода.
fly(Flyable flyable). Так что мне не нужно такое дизайнерское решение. Я помню, как столкнулся с этой проблемой, когда реализовывал алгоритм поиска для приложения, которое будет предоставлять список результатов, но элемент списка будет иметь другой
пользовательский интерфейс,
HTTP-вызовы для разных конечных URL-адресов,
анализ JSON,< br> Сопоставление с различными классами POJO.
К сожалению, мне пришлось решать эту проблему с помощью альтернативного подхода, о котором я упоминал.
flyable
в родительских и подклассах? Какой смысл в дублировании? - person Tom   schedule 12.08.2017super(new CantFly());
). - person Tom   schedule 12.08.2017