2016-04-12 3 views
0

Я вроде понимаю схему объекта цепи в Ruby, как в этом примере:Instance объект суперкласса в Рубине

class C 

    def initialize 
    @vc = 1 
    end 

    def a_method 
    'C#a_method' 
    end 
end 

class D < C 
    def initialize 
    @vd = 1 
    super 
    end 

end 

obj = D.new 

объекта obj пункта его одноплодный класс #obj (правильное направление), а затем этот одноэлементный класс #obj точка D и D указывают на C (направление вверх)

Мой вопрос: есть ли объект класса C, созданный и входящий в состав этой диаграммы?

Что является целью этого объекта? могу ли я обратиться к нему? есть ли точка ссылки на нее, так как я могу получить доступ к ее переменным экземпляра и методы экземпляра от obj.

Является ли суперкласс главным для предоставления только экземпляров? что означает , нам обычно не нужно инициализировать метод и переменные экземпляра в суперклассе?

Спасибо.

ответ

0

Я не знаком с тем, как компилятор интерпретирует директивы в вашем примере, поэтому я не уверен, что объект класса C когда-либо создается, хотя я так не думаю. Случается, что класс D наследует методы и свойства класса C. Важное упрощение будет означать, что когда вы ссылаетесь на свойства или методы экземпляра класса D, вы действуете по классу D и класс C.

Использование наследования полностью зависит от вашего прецедента. В некоторых случаях будет выгодно использовать метод суперкласса initialize, в других - нет. Ваш случай использования не совсем ясен, возможно, если вы сообщите нам, чего вы хотите достичь, я могу указать вам в правильном направлении.

0

«Мой вопрос в том, есть ли объект класса C, который создается и будет частью этой диаграммы?»

Да, в тот самый момент Рубин интерпретирует:

class C 
end 

создает объект, с object_id и все.

C.object_id # => 10744340 

Этот объект C не является ничего особенного, это просто пример:

C.class # => Class 

«Могу ли я ссылаться на него есть точка привязки его, так как я могу получить доступ к его переменных экземпляра и экземпляр методы из obj. " Да, мы просто сделали это дважды.

+0

Вы имеете в виду объект с @vc = 1? как мне это сделать? – totally

Смежные вопросы