#java #inheritance
#java #наследование
Вопрос:
Я делал mooc.fi конечно, и мне трудно понять наследование. В частности, этот пример.
Что печатает программа?
public class Counter {
public int addToNumber(int number) {
return number 1;
}
public int subtractFromNumber(int number) {
return number - 1;
}
}
public class SuperCounter extends Counter {
@Override
public int addToNumber(int number) {
return number 5;
}
}
public static void main(String[] args) {
Counter counter = new Counter();
Counter superCounter = new SuperCounter();
int number = 3;
number = superCounter.subtractFromNumber(number);
number = superCounter.subtractFromNumber(number);
number = counter.addToNumber(number);
System.out.println(number);
}
По-видимому, это не 6.
Некоторая помощь была бы признательна.
Комментарии:
1. Вы знаете, что SuperCounter является подклассом Counter .
Ответ №1:
Результат равен 2. Давайте посмотрим.
Counter counter = new Counter();
дает намcounter
addToNumber
subtractFromNumber
методы with и .Counter superCounter = new SuperCounter();
дает намsuperCounter
addToNumber
метод with .int number = 3;
number = superCounter.subtractFromNumber(number);
Поскольку superCounter не переопределяет старый subtractFromNumber, он вычитает 1. Теперьnumber == 2
.number = superCounter.subtractFromNumber(number);
То же самое, вычтите 1,number == 1
.number = counter.addToNumber(number);
Этот метод добавляет 1. Nownumber == 2
.
Результат 2
, как мы и ожидали.
Ответ №2:
Вы создали 2 класса, и один наследует от другого (SuperCounter от Counter), что означает, что он наследует один метод «subtractFromNumber» и переопределяет другой метод «addToNumber».
Затем вы создаете экземпляры этих классов «counter» и «superCounter», вызывая метод «subtractFromNumber» для экземпляра класса «superCounter» 2 раза и метод «addToNumber» для другого экземпляра класса «counter». Но поскольку вы вызываете метод «addToNumber» для экземпляра класса «counter», соответственно, вызывается метод класса «Counter».
Согласно коду, вы получаете ответ «2»:
- int number = 3; // 3
- number = superCounter.subtractFromNumber(число); // 3 — 1 = 2
- number = superCounter.subtractFromNumber(число); // 2 — 1 = 1
- number = counter.addToNumber(число); // 1 1 = 2
- System.out.println(число); // 2
Комментарии:
1. Ответ в курсе — 8, поэтому я не уверен, что происходит.
2. Ответ курса неверен. Вы можете запустить код для себя, чтобы увидеть, что ответ равен 2. Ответ может быть только 8, если а) вычитания не было и б) вы использовали суперконтер для добавления номера.
3. Должно быть, это ошибка, сначала я думал, что это 2, затем, возможно, 6, но ни один из них не был принят. У них есть комната обратной связи telegram, поэтому я расскажу им об этом там.
4. Могу ли я задать еще один вопрос о наследовании в этой теме или мне нужно опубликовать новый вопрос?
5. Вам нужно написать новый вопрос.