2013-05-30 42 views
2

這下面是是超/亞類構建體的一個示例:兩個類之間的超級/子關係?

C:\>irb --simple-prompt 
>> class Parent 
>> @@x = 10 
>> end 
=> 10 
>> class Child < Parent 
>> @@x = 12 
>> end 
=> 12 
>> class Parent 
>> puts "@@X = #{@@x}" 
>> end 
@@X = 12 
=> nil 

和上面也understood.But我想檢查是否可以或不可以當兩個類被seprately定義爲獨立的類無論如何,以限定他們之間的超級/子關係?

我嘗試了下面,但它不起作用。可能不是我嘗試的方式:

C:\>irb --simple-prompt 
>> class Parent 
>> @@X = 10 
>> end 
=> 10 
>> class Child 
>> @@x = 15 
>> end 
=> 15 
>> class Child < Parent 
>> def show 
>> p "hi" 
>> end 
>> end 
TypeError: superclass mismatch for class Child 
     from (irb):7 
     from C:/Ruby193/bin/irb:12:in `<main>' 
>> 
+0

Dupe:http://stackoverflow.com/questions/3127069/how-to-dynamically-alter-inheritance-in-ruby。例如。在定義了類之後,您不能更改超類。 –

回答

0

在Ruby中聲明瞭一個類後,你不能改變它的超類。但是,如果要在類中包含特定行爲,則可以使用模塊對其進行擴展。

module Parent 
    def yell_at_kids 
    puts "Stop hitting your brother!" 
    end 
end 

class Child 
    def have_children 
    extend Parent 
    end 
end 

Child.new.have_children.yell_at_kids 

在這種情況下,父是可以被包括或擴展到其他對象(如這裏我們的兒童類的一個實例)的模塊。你不能用另一個類來擴展一個類,但是你可以用一個模塊來擴展一個類。