2012-01-27 2 views
2

Я построил карту и попытаюсь поместить в нее подклассы данного класса. Проблема в том, что карта принимает некоторые из них, но не все. Пожалуйста, дайте мне знать, в чем проблема, почему некоторые подклассы не принимаются и как их исправлять. Я также старался, чтобы класс Cat и Dog расширял грызунов (поскольку здесь работает Хомяк), но это не работает. СпасибоКарта не принимает подклассы

Вот код для каждого класса:

package typeinfo.pets; 

public class Pet extends Individual { 
    public Pet(String name) { super(name); } 
    public Pet() { super(); } 
} ///:~ 

package typeinfo.pets; 

public class Rodent extends Pet { 
    public Rodent(String name) { super(name); } 
    public Rodent() { super(); } 
} ///:~ 

package typeinfo.pets; 

public class Cat extends Pet { 
    public Cat(String name) { super(name); } 
    public Cat() { super(); } 
} ///:~ 

package typeinfo.pets; 

public class Hamster extends Rodent { 
    public Hamster(String name) { super(name); } 
    public Hamster() { super(); } 
} ///:~ 

import typeinfo.pets.*; 

import java.util.*; 

import static net.mindview.util.Print.*; 



public class PetMap { 

    public static void main(String[] args) { 

    Map<String,Pet> petMap = new HashMap<String,Pet>(); 

    petMap.put("My Hamster", new Hamster("Bosco")); 

    //the two lines here cause problems "Map<String, Pet> is not 
    // applicable to <String, Cat> 
    petMap.put("My Cat", new Cat("Molly")); 

    petMap.put("My Dog", new Dog("Ginger")); 

    print(petMap); 

    Pet dog = petMap.get("My Dog"); 

    print(dog); 

    print(petMap.containsKey("My Dog")); 

    print(petMap.containsValue(dog)); 

    } 

} 
+1

Есть ли статический внутренний класс с именем 'net.mindview.util.Print.Cat'? –

+1

Здесь все выглядит отлично, поэтому я думаю, что ваша проблема лежит где-то в другом месте. Также размещение 'import net.minview.util.Print. *' Здесь не является хорошей идеей, так как это зависимость, которую не все могут встречать на своей машине. – Jagger

+1

Просто, чтобы согласиться со всеми остальными, он должен работать нормально, если вы не импортируете то, что вам не нужно. Убедитесь, что в вашей среде IDE ссылка на 'new Cat' фактически вызывает класс, который вы ожидаете от него. – Marcelo

ответ

1

Поскольку большинство пользователей предложили, ваша проблема не лежит в дереве наследования, но Somwhere вдоль линий, какие классы вы импортировали и откуда.

Cat и Dog, которые вы используете в своем основном методе, могут не быть подклассами Pet; вероятно, поэтому Hamster принимается, а остальные нет. Я попытался сделать ваш код запущенным и добавил, что пропало. Например, следующие работы:

import java.util.*; 

class Individual { 
    public String name; 
    public Individual(String name) { 
     this.name = name; 
    } 
    public Individual() { 
     this.name = new String(); 
    } 
} 
class Pet extends Individual { 
    public Pet(String name) { super(name); } 
    public Pet() { super(); } 
} ///:~ 

class Rodent extends Pet { 
    public Rodent(String name) { super(name); } 
    public Rodent() { super(); } 
} ///:~ 

class Cat extends Pet { 
    public Cat(String name) { super(name); } 
    public Cat() { super(); } 
} ///:~ 

class Dog extends Pet { 
     public Dog(String name) { super(name); } 
     public Dog() { super(); } 
    } ///:~ 

class Hamster extends Rodent { 
    public Hamster(String name) { super(name); } 
    public Hamster() { super(); } 
} ///:~ 



public class PetMap { 

    public static void main(String[] args) { 

    Map<String,Pet> petMap = new HashMap<String,Pet>(); 

    petMap.put("My Hamster", new Hamster("Bosco")); 

    // the two lines now work 
    petMap.put("My Cat", new Cat("Molly")); 

    petMap.put("My Dog", new Dog("Ginger")); 

    System.out.println(petMap); 

    Pet dog = petMap.get("My Dog"); 

    System.out.println(dog); 

    System.out.println(petMap.containsKey("My Dog")); 

    System.out.println(petMap.containsValue(dog)); 

    } 

} 

Повторите проверку своих определений и импорта пакетов.

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