2014-12-12 3 views
0

У меня возник вопрос о наследовании в java. Код может показаться не очень привлекательным, но он связан с основами наследования , и я просто не вижу проблемы, почему код не должен работать вообще. Вот код:Смуты с наследованием в java

class Lizard {} 

class Iguana extends Lizard {} 

class TestDriver { 
    public static void main(String[] args) { 
     Iguana iguana1 = new Iguana(); 
     Lizard lizard1 = new Lizard(); 
     Lizard lizard2 = iguana1; 

    } 
} 

Я знаю, что мне нужно использовать cast..but где? И почему код не компилируется?

На мой взгляд, похоже, что имеет объект «ящерицы», ссылающийся на «игуану» (последняя строка). Надеюсь, кто-то может мне помочь! :)

+6

Никаких бросков не требуется, и код должен компилироваться и запускаться без проблем. –

+3

Являются ли каждый из этих классов в разных файлах? И в том же пакете? –

+3

Если он не компилируется, отправьте сообщение об ошибке. Не позволяйте людям догадываться. –

ответ

1

Вам не нужно использовать трансляцию, потому что Iguana является подклассом Lizard. Поэтому, если компилятор видит Iguana, знает, что его можно считать Lizard.

Если вы идете в другую сторону - попытайтесь назначить ссылку на ящерицу на Игуану, тогда фактический объект может быть игуаной, или вместо этого может быть какой-то другой вид ящерицы, поэтому вам нужно использовать бросок сказать компилятору «Я знаю, что делаю, и это действительно игуана».

+0

Спасибо! это помогло! – Lilly

+0

@ Lilly Если этот или любой другой ответ удовлетворительно решает вашу проблему, вы должны принять его, нажав галочку рядом с ним. То же самое относится к любому другому вопросу, который вы можете задать в будущем. У вас даже есть две точки репутации! Если вы хотите получить дополнительную информацию, вы можете посмотреть эту мета-почту: [Как принимается ответ?] (Http://meta.stackexchange.com/q/5234/238586). –

+0

Получил! Знаете ли вы, почему я получаю исключение classCastException, когда пытаюсь использовать «Iguana iguana = (Iguana) lizard1»? Поскольку iguana «является« ящерицей », должно быть совершенно правильно добавить бросок, как вы предложили. – Lilly

5

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

Нет, в этом случае вам не нужны никакие броски.

Iguana iguana1 = new Iguana(); // Ok: Iguana can be assigned to Iguana 
Lizard lizard1 = new Lizard(); // Ok: Lizard can be assigned to Lizard 
Lizard lizard2 = iguana1;  // Ok since an Iguana *is a* Lizard 

И почему не код скомпилировать?

сборник. Я просто проверил себя.

+0

он не компилируется с затмением .. но неважно, я получил его сейчас – Lilly

+0

Eclipse - это то, что я использовал. Какое сообщение об ошибке вы получаете? – aioobe

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