сразу скажу что я понимаю как переопределяются методы(что если метод в наследнике переопределён то вызываться будет он и что если метод приват в предке то он не наследуется)МНЕ НЕ ПОНЯТНО ВОТ ЧТО:если мы в конструкторе класса B вызываем конструктор класса A в виде super(f1) и во многих статьях пишется что это равнозначно new A(f1) ,то раз так, должна создаться ссылка на обьект класса А и тогда в конструкторе класса А мы обращаемся к полю f1 и к методу initialize() через ссылку this обьекта А и тогда метод должен вызываться у обьекта А и выводить 6,- ЭТО ДОКАЗЫВАЕТС ТОТ ФАКТ ЕСЛИ ЯВНО В КОНСТРУКТОРЕ КЛАССА B вызвать new A(f1)....ок ..Допустим super(f1) не создаёт ссылку на обьект класса А а принимает ссылку на обьект класса B которую мы создали ранее,тогда выходит что мы инициализируем this.f1 = f1 которая перешла по наследству обьетку B?и потом снова инициализируем эту f1 в контсрукторе класса B?
Toro Rosso
17 уровень
метод initialize()
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Toro Rosso
29 августа 2020, 18:00
public class Solution {
public static void main(String[] args) {
new B(6);
}
public static class A {
private int f1 = 7;
public A(int f1) {
this.f1 = f1;
initialize();
}
protected void initialize() {
System.out.println(f1);
}
}
public static class B extends A {
protected int f1 = 3;
public B(int f1) {
super(f1);
this.f1 += f1;
initialize();
}
protected void initialize() {
System.out.println(f1);
}
}
}
0
Ksenia Volkova Java Developer в DXC Master
29 августа 2020, 19:14
При вызове super(f1) инициализируется поле f1 класса A. Оно приватное, и поэтому для B недоступно. У B есть свое поле f1, которое будет проинициализировано в строке this.f1 += f1 после super()
0
Toro Rosso
30 августа 2020, 06:16
давай представим,если бы оно было publiс и в классе B поле тоже было бы паблик и с другим названием, то в конструкторе класса А мы бы обращались к нему через ссылку обьекта B или обьекта А?меня просто смущает почему вызывается метод initialize у обьекта B...При вызове super() что происходит создаётся ссылка на обьект класса А? или super() принимает ссылку обьека B ,потому что мы же должны через что то обращаться к полям и методам в конструкторе super()
0
Ksenia Volkova Java Developer в DXC Master
31 августа 2020, 07:25решение
Если бы в A было публичное поле f1, а в B, допустим, f2, то поле f1 наследовалось бы классом B, и при вызове super() обращение бы шло к переменной f1 класса B.
+3
Toro Rosso
31 августа 2020, 07:32
немножно до меня дошло)
0