使用继承构造对象 (java)?
Constructing objects using inheritance (java)?
所以规则规定,如果 B 是 A 的子类,那么当需要 A 类型的对象时,B 就可以。
因此,如果我在超类 Animals
中有一个非静态方法并使用子类 Dog
的对象调用它,它将正常运行,例如Dog rexy = new Dog();
-> rexy.someMethodFromAnimals();
。然后,使该对象的静态类型 Animals
对我有什么好处,例如Animals rexy = new Dog();
。这会带来什么?
假设您有四种动物 - Dog
、Cat
、Rat
和 Fish
。
现在,您希望能够跟踪家中的所有宠物。为此,您可以保留多个不同种类动物的列表。或者,您可以提取一个 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;
会很奇怪,自定义类型也是如此
所以规则规定,如果 B 是 A 的子类,那么当需要 A 类型的对象时,B 就可以。
因此,如果我在超类 Animals
中有一个非静态方法并使用子类 Dog
的对象调用它,它将正常运行,例如Dog rexy = new Dog();
-> rexy.someMethodFromAnimals();
。然后,使该对象的静态类型 Animals
对我有什么好处,例如Animals rexy = new Dog();
。这会带来什么?
假设您有四种动物 - Dog
、Cat
、Rat
和 Fish
。
现在,您希望能够跟踪家中的所有宠物。为此,您可以保留多个不同种类动物的列表。或者,您可以提取一个 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;
会很奇怪,自定义类型也是如此