Карта не принимает подклассы - PullRequest
2 голосов
/ 27 января 2012

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

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

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 Ответ

1 голос
/ 27 января 2012

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

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));

  }

}

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

...