Есть два класса:
public class A
{
private int _a;
public A()
{
_a=1;
}
public void f1(A a)
{
if(a instanceof B)
{
f1((B) a);
}
else
System.out.println("Nothing");
}
//...
}
public class B extends A
{
private int _a;
private int _b;
public B()
{
_b=100;
}
public void f1(B b)
{
System.out.println("B::f1(B)");
}
public void f1(Object o)
{
System.out.println("B::f1(Object)");
}
//...
}
И блок кода в main ()
:
B b = new B();
A a = b;
b.f1(a);
Когда я пытаюсь запустить программу, выходит:
runtime error
Я не могу понять по какой причине это происходит, а именно почему в блоке кода
if(a instanceof B)
{
f1((B) a);
}
Продолжает вызываться метод f1 ()
в классе А
, а не в классе B
?
Буду благодарен если мне кто-нибудь объяснит логику происходящего.
В классе A
происходит рекурсивный вызов функции f1()
:
public void f1(A a) {
if (a instanceof B) {
f1((B) a);
}
else {
System.out.println("Nothing");
}
}
Для того, чтобы дать компилятору понять, что ему нужно искать не метод текущего класса, а метод объекта, нужно сделать что-то вроде ((B) a).f1(a);
В случае если не планируется переопределять метод в классе-потомке, подойдет:
B bFromA = (B) a;
bFromA.f1(bFromA);
В данном случае наверное лучше выбрать что-то одно - переопределение (override
) или перегрузку (overload
), а то выглядит слишком громоздко.
Строго говоря в текущей конфигурации решение не являет перегрузкой, т.к. у класса A
только один метод f1()
, хотя судя по тегам именно она задумывалась при описании.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
друзья! Изучаю Spring, создал restful web-service на Spring и разбираю в данный момент приложение, но не пойму где находится: {"id":1,"content":"Hello, World!"} - JSON строка,...
Изучаю spring, перевожу web приложение java на springПри загрузке выскакивает ошибка: One or more listeners failed to start
У меня єсть клас
мне интересно, как взять размер конкретной папки в amazonClient ? Я знаю, что все внутри Амазона - это обьектыНо ведь как-то же можно взять размер...