Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Наследование,..... и не только....


Автор: Samotnik 18.8.2007, 01:31
Добрый день!
Значит так, прочитал в разделе "Наследование" главу "Переменная суперкласса может ссылаться на обьект подкласса"
Хотелось бы узнать ПРОСТЫМ  обьяснением   ЧТО ЭТО ТАКОЕ  smile  ?!!?!?!?

Автор: ekr 18.8.2007, 01:42
Объектная ссылка типа базового класса указывает на объект класса-наследника.
Код

Object o = new String();

То же справедливо и для интерфейсов:
Код

MyInterface o = new ClassThatImplementsMyInterfce();


К слову, эта тема уже поднималась на форуме.

Автор: Samotnik 18.8.2007, 01:53
А примерчик маленький  можно ???   smile 

Цитата(ekr @  18.8.2007,  01:42 Найти цитируемый пост)
К слову, эта тема уже поднималась на форуме.

К слову, сматрел, .... не помогло........
 smile    

Автор: ekr 18.8.2007, 15:02
примерчик уже привел:
Цитата(ekr @  18.8.2007,  01:42 Найти цитируемый пост)
Object o = new String();

)))

Объектная ссылка o типа класса Object указывает на экземпляр класса String, который IS-A Object

Автор: priam220 17.10.2010, 23:41
отдельной темы не хочется создавать, решил посадить здесь. Объясните, пожалуйста поведение вот этого кода:
Код

public class A{
    private String runNow(){
        return "High";
    }
    static class B extends A{
        public String runNow(){
            return "Low";
        }
    }
    public static void main (String args[]){
        A[] a = new B[]{new B(),new C()};
        for (A aa:a)
            System.out.print(aa.runNow()+" ");
    }
}    
class C extends A.B{
    public String runNow(){
        return "Out";
    }
}

Заранее спасибо smile.

Автор: afon 18.10.2010, 01:10
Скомили, запустил -клас! хитрожопый пример smile мне понравился. 
Но я тоже не понимаю как это работает. 

Автор: techmax 18.10.2010, 03:56
Код

public class A{
 private String runNow(){
        return "High";
    }

метод то private, и значит в наследниках не переопределяется

Автор: priam220 18.10.2010, 16:28
Ни объект B ни C не содержат (я так думаЛ) приватный метод runNow от A. Собственно потому, что он приватный. Но тем не менее ссылка успешно кудато ссылается (я об этом: A[] a = new B[]{new B(),new C()}; и aa.runNow()). Теперь я думаю, что и B и С содержат этот метод. Но он становится доступным только в определенной зоне видимости (внутри класса А). 
В любом случае хотелось бы услышать почему все так а не иначе... smile 

Автор: danilka 22.10.2010, 17:58
Цитата(priam220 @  18.10.2010,  16:28 Найти цитируемый пост)
Ни объект B ни C не содержат (я так думаЛ) приватный метод runNow от A. Собственно потому, что он приватный. Но тем не менее ссылка успешно кудато ссылается (я об этом: A[] a = new B[]{new B(),new C()}; и aa.runNow()). Теперь я думаю, что и B и С содержат этот метод. Но он становится доступным только в определенной зоне видимости (внутри класса А). 


Я думаю все именно так. Модификаторы ничего не говорят о наличии методов в потомках, но говорят об их видимости. Раз класс наследник, то он имеет все что имеет родитель, а вот пользоваться этим может только в контексте модификатора.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)