2014-06-29 2 views
2

Я пытаюсь сделать программу наследования следующим образом:Superclass несовпадение

class P1 
end 

class P2 
end 

class A < P1 
end 

class A < P2 
end 

Когда я запустил эту программу, я получил ошибку следующим образом:

superclass mismatch for class A (TypeError) 

Как я могу решить эту ошибку?

ответ

5

Когда вы определяете класс, он по умолчанию наследует Object. Если вы сделаете его подклассом любого другого класса, тогда он унаследует, что другой класс. Но это подклассирование может быть выполнено только тогда, когда вы впервые определяете свой пользовательский класс, используя ключевое слово class или метод Class::new. После того как вы определили его, когда вы снова откроете свой класс во второй раз и дальше, вам не будет позволено ИЗМЕНИТЬ свой класс суперкласс.

В вашем примере:

# here you are defining your new class A, so you can make it now a subclass of 
# the parent class of any, like P1 
class A < P1 
end 

# here you are reopeing the same class A. Now you are not again allowed to change the 
# super class of it, which is P1. 
class A < P2 
end 

Что вы можете сделать, это, сделать P1 и P2 модулей, а затем включает их внутри A в любое время вы хотите, чтобы во время вашей программы.

+2

Я отредактировал вопрос, потому что в нем было так много шума. Поэтому определения конкретного метода исчезли из него. Возможно, вы захотите удалить это. Это сделает ваш ответ более точным. – sawa

+2

Вызов метода не имеет отношения к ошибке. Ошибка возникает в момент класса A sawa

+0

@sawa Согласен. Я также редактировал. Спасибо, что рассказали мне об изменении содержания сообщения. –

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