0

请问为什么在petMap.put那里,Pet类的对象可以用new Cat(),new Dog()构造,这跟构造器有什么不同?涉及到了具体哪块知识?并且为什么在输出时,Cat Dog也能出现在输出结果里?恳请点拨!


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 Cat", new Cat("Molly"));
        petMap.put("My Dog", new Dog("Ginger"));
        petMap.put("My Hamster", new Hamster("Bosco"));
        print(petMap);
        Pet dog = petMap.get("My Dog");
        print(dog);
    }
} 

/* Output:
{My Cat=Cat Molly, My Hamster=Hamster Bosco, My Dog=Dog Ginger}
Dog Ginger

查看全部 2 个回答

3

你说的应该是继承吧?定义一个接口,然后用类去实现,就可以实现你说的构造了(父类引用指向子类)。是java三大特种之一的多态里面的内容。
例子:
接口如下:

interface Pet {
    void eat();
}

实现类如下:

class Cat implements Pet{
    @Override[override] 
    public void eat() {
        System.out.print("猫吃鱼");
    }
}
class Dog implements Pet{
    @Override[override] 
    public void eat() {
        System.out.print("狗吃骨头")
    }
}

测试类代码如下:

class Test {
    public static void main(String[] args) {
        Pet a = new Cat();
        Pet b = new Dog();
        a.eat();
        b.eat();
    }
}