Вот мой код:
class base
{
void a()
{
System.out.println("base.a");
}
void b()
{
System.out.println("base.b");
}
}
class derived extends base
{
void a()
{
System.out.println("derived.a");
}
void b()
{
System.out.println("derived.b");
}
}
public class Test
{
static void do_something(base _class)
{
base _base = _class;
_base.a();
_base.b();
}
public static void main(String args[])
{
System.out.println("Test");
base a_base = new base();
a_base.a();
a_base.b();
derived a_derived = new derived();
a_derived.a();
a_derived.b();
System.out.println("Test 2");
do_something(a_base);
do_something(a_derived);
}
}
То есть у меня есть 2 класса — родитель и наследник. Есть метод, который должен принимать предка, но в который я могу передать как предка, так и наследника(do_something).
Как я понял, все функции в Java ведут себя как виртуальные (выражаясь терминами c++). То есть, в зависимости от того, кого я передал в метод, те функции и вызовутся (предка или наследника).
Допустим, мне надо, чтобы вне зависимости от того, кого я передал в этот метод, вызывались методы предка (base). В С++ я бы просто сказал, что эта функция не виртуальная. Как я понимаю в Java такого понятия нет, поэтому я попробовал пирвести переданный класс к предку:
base _base = _class;
Но несмотря на это, следующие вызовы:
_base.a();
_base.b();
приводят к вызову методов переданного класса (как предка, так и наследника).
Как сделать, чтобы вне зависимости от переданного класса, вызывались методы класса base.