Теоритический вопрос по функциям и наследованию
От: DemAS http://demas.me
Дата: 12.11.02 07:16
Оценка:
Вот мой код:



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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.