Полиморфизм Java: почему возвращается ошибка? - PullRequest
0 голосов
/ 08 мая 2018

Почему работает

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

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

Ларри 1

Гарри 1

Мэри 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");
    }
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018
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
0 голосов
/ 08 мая 2018

Используйте

((Mary) var3).method3();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...