Использование, если применимо, метода подкласса - PullRequest
1 голос
/ 05 апреля 2020

У меня есть следующий код:

public class A {
    private boolean val(){
        return true;
    }

    protected boolean test(){
        return val();
    }
}

public class B extends A {
    private boolean val(){
        return false;
    }
}

public class C {
    public static void main(String[] args){
        B b = new B();
        System.out.println(b.test());
    }
}

Возвращает true, потому что метод test () в A вызывает val (). После некоторых исследований я понял, что это ожидается в Java. Однако я бы хотел, чтобы test () выводил false при вызове из B, и true при вызове из A. Возможно ли это сделать?

1 Ответ

2 голосов
/ 05 апреля 2020

Причина, по которой ваш код вызывает A val(), а не B * val(), заключается в том, что метод val() имеет модификатор доступа private и поэтому не может быть переопределен. Измените модификатор доступа на protected.

public class A {
    protected boolean val(){
        return true;
    }

    protected boolean test() {
        return val();
    }
}

public class B extends A {
    protected boolean val() {
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...