Объясните, пожалуйста, почему нижележащий код выводит:
1 teamlead
1 programmer
Собственно в чем мое непонимание? Изначально код начинает выполняется в конструкторе класса Programmer
. Дальше происходит вызов super(...)
и мы попадаем в родительский конструктор TeamLead
, здесь и начинаются вопросы. В конструкторе TeamLead
в данном конкретном случае this
будет ссылаться на объект класса Programmer
, тогда я не понимаю как ему вообще можно установить атрибут numTeamLead
(почему это работает?), если private
поля не наследуются дочерними классами.
Второй вопрос - как Java будет искать какой из методов employ()
надо вызвать? Тот же вопрос, если модификатор у них изменить на public
.
Если оба модификатора доступа у employ()
заменить на public
, то вывод будет таким:
0 programmer
1 programmer
class Test {
public static void main(String[] args) {
new Programmer(1);
}
public static class TeamLead {
private int numTeamLead;
public TeamLead(int numTeamLead) {
this.numTeamLead = numTeamLead;
employ();
}
private void employ() {
System.out.println(numTeamLead + " teamlead");
}
}
public static class Programmer extends TeamLead {
private int numProgrammer;
public Programmer(int numProgrammer) {
super(numProgrammer);
this.numProgrammer = numProgrammer;
employ();
}
private void employ() {
System.out.println(numProgrammer + " programmer");
}
}
}
Читайте про последовательность вызовов при наследовании класса.
Если вы делаете поле private
это поле будет видимо только внутри класса и обращаться к ним можно только через методы. numTeamLead вы ему ставите в кострукторе, который сами вызываете super(numProgrammer)
.
Что касается если вы сделаете два метода public void employ(){...}
то будет выполняться метод описанные в классе наследнике (Programmer
), т.к. вы переопределите метод описанный в классе TeamLead.
Да и иерархия у вас странная логичней наоборот TeamLead extends Programmer
, но для данного примера это не важно :).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть приложение, которое начал писать на swingЗатем узнал, что график удобнее нарисовать с помощью JavaFx и JFXPanel Пробую пока примеры отсюда Сам...
Пытаюсь сделать отправку емейла на фреймворке Spring
Есть файл с текстом "5 4 6 3 51 23 43 10 12 21"Нужно сделать со всех цифр массив и что бы каждое число было отдельно