Я сейчас беру урок о Java и пытаюсь понять проблему, с которой столкнулся. Предположим, что существует следующий код:
public class Parent
{
public Parent()
{}
}
public class Child extends Parent
{
private int num;
public Child
{
super();
num = 1;
}
public int getNum()
{
return num;
}
}
Затем в отдельном классе из Parent
или Child
:
Parent a = new Child();
System.out.print(a.getNum());
, который должен обеспечить вывод:
1
Из того, что я узнал, это должно выполняться без ошибок, поскольку часть кода new Child()
должна определять, к какому классу относится экземпляр объекта, а часть Parent a
должна выделять пространство. в памяти для объекта Parent
, названного «a», который может заполнить объект Child
, поскольку он является подклассом класса Parent. Тот факт, что это пространство сохраняется для родительского объекта, просто диктует, что если бы метод появился в классах Parent
и Child
с разными описаниями, описание метода класса Parent
будет иметь приоритет над описание метода Child
class (и противоположное описание будет иметь приоритет, если пространство, отведенное для a
, будет для Child
объекта (er go Child a =
et c.)).
Мне также сказали, что такая ситуация может привести к ошибке. Я чувствую, что есть что-то, что я серьезно неправильно понимаю в отношении Наследования в целом, хотя везде, куда я смотрю, кажется, что они дают мне разные ответы и противоречивые данные (это, скорее всего, связано с неопытностью в языке, хотя информация все еще не передается, потому что этого). Хотел бы кто-нибудь объяснить, почему этот код дает ответ, который он дает, и как мне следует что-то изменить в этом коде, чтобы он дал ожидаемый результат, и почему новый код работает? Заранее спасибо.