Неполиморфный вызов
От: LCR Россия lj://_lcr_
Дата: 06.08.04 04:57
Оценка:
Здравствуйте. Когда-то я постил аналогичный топик, но там допустил грубую ошибку и вопрос потерял смысл — в Java все методы по умолчанию виртуальные. Но есть уже другая ситуация.

class A
{
    public int meth() { return 10; }

    public void coolMeth()
    {
        System.out.println(meth()); // !!! НЕ хочется, чтобы вот здесь сработал полиморфный вызов
    }
}

class B extends A
{
    public int meth() { return 20; }
}

class Test
{
    public static void main(String[] args)
    {
        A a = new A();
        B b = new B();
        a.coolMeth();  // выводит 10
        b.coolMeth();  // выводит 20, а я хочу 10!
    }
}

Строка помеченная тремя восклицательными флагами содержит полиморфный вызов meth().
Мои попытки избавиться от этого:
System.out.println(this.meth()); // естественно не работает, поскольку динамический тип this'a = B
System.out.println((A)this.meth()); // тоже не работает, поскольку динамический тип this'a = B, а преобразование ничего не даёт.
System.out.println((new A()).meth()); // работает, но это уже от Лукавого... :) - объект другой


Как?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.