使用继承构造对象 (java)?

Constructing objects using inheritance (java)?

所以规则规定,如果 B 是 A 的子类,那么当需要 A 类型的对象时,B 就可以。

因此,如果我在超类 Animals 中有一个非静态方法并使用子类 Dog 的对象调用它,它将正常运行,例如Dog rexy = new Dog(); -> rexy.someMethodFromAnimals();。然后,使该对象的静态类型 Animals 对我有什么好处,例如Animals rexy = new Dog();。这会带来什么?

假设您有四种动物 - DogCatRatFish

现在,您希望能够跟踪家中的所有宠物。为此,您可以保留多个不同种类动物的列表。或者,您可以提取一个 Animal 类型的超级 class,它包含所有动物共有的字段和方法,并为所有宠物保留一个 ArrayList<Animal> myPets = new ... 列表。

好处是当你想把所有动物都当作动物时,你有能力做到这一点,即使动物个体可能具有完全不同的特征。

简而言之,所以你可以尽可能通用。诚然,使用 Animals dog = new Dog();Dog dog = new Dog(); 相比没有太大好处。但是,Animals animal = someWebService.getFirstAnimal(); 会工作,而 Dog dog = someWebService.getFirstAnimal(); 不会编译,因为 getFirstAnimal() 大概是 returns 和 Animal.

顺便说一句,你的 class 真的应该叫做 Animal,而不是 Animals。你声明一个 Integers i = 1; 会很奇怪,自定义类型也是如此