Полиморфизм Java: почему возвращается ошибка?

Почему бег

Larry var3 = new Jerry();
var3.method3();

выводить ошибку вместо

larry 1

harry 1

mary 3

Я думаю, это может иметь какое-то отношение к способу создания объекта. Но это всего лишь мои предположения.

Это код:

public class Harry {
    public void method1() {
        System.out.println("harry 1");
    }

    public void method2() {
        method1();
        System.out.println("harry 2");
    }
}

public class Larry extends Harry {
    public void method1() {
        System.out.println("larry 1");
        super.method1();
    }
}

public class Mary extends Larry {
    public void method2() {
        System.out.println("mary 2");
    }

    public void method3() {
        super.method1();
        System.out.println("mary 3");
    }
}

public class Jerry extends Mary {
    public void method2() {
        super.method2();
        System.out.println("jerry 2");
    }
}

Какая ошибка? Это всегда важно.

Carcigenicate 08.05.2018 01:40

@Carcigenicate Это онлайн-задание на сайте Practice-it. Вы либо указываете вывод кода, либо вводите «ошибку», если в противном случае. При использовании указанного выше метода ошибка является правильным ответом.

James Nguyen 08.05.2018 01:43

Затем вам следует вставить код в реальную среду, даже в онлайн-компилятор, и запустить его. Вы не можете ожидать, что сможете правильно отладить свой код на предмет ошибок, если даже не знаете, в чем заключается ошибка.

Carcigenicate 08.05.2018 01:45

@Carcigenicate Я новичок в Java, я только начал главу "Полиморфизм" несколько дней назад. Мне просто нужно знать, почему метод не работает.

James Nguyen 08.05.2018 01:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использовать

((Mary) var3).method3();

и он будет работать нормально.

Спасибо за ответ, но я спрашивал, почему метод не работает с созданным объектом.

James Nguyen 08.05.2018 01:57
Ответ принят как подходящий
Larry var3 = new Jerry(); // casting Jerry to Larry. 
var3.method3(); // there is no Larry.method3 method.
// You need downcast object to derived class with method3() defined to call it

Другие вопросы по теме