ANIMAL
/ \
VERTEBRATE INVERTEBRATE
/ | \ / | \
CAT DOG COW SPIDER ANT CORAL
/ \
COLOR_SOLID CALICO
Animal为父类,其余为子类
就多态性而言,我知道声明这一点是合法的:
Animal donkey = new Vertebrate();
但声明是非法的:
Invertebrate starfish = new Cat();
或者:
Spider red = new Invertebrate();
我主要关心的是:
如何识别合法与非法声明?
这样假设是否安全:虽然子级可以从父级继承,但父级不能从子级继承?
最佳答案
你是对的。
Invertebrate starfish = new Cat();
不允许,因为 Cat
没有实现 Invertebrate
类,并且它不是任何实现该类的后代。
Spider red = new Invertebrate();
不允许,因为 Invertebrate
不是 Spider
的后代。
您可以使用标准的“IS A”术语与现实世界进行类比来思考这一点。
蜘蛛
是无脊椎动物
。
无脊椎动物
不是蜘蛛
(有些无脊椎动物不是蜘蛛)。
猫
不是无脊椎动物
(不过,您可以将它们都放在一个盒子里)。
额外:
“将它们放在一个盒子里”演示了一个单独的概念,即接口(interface)。您可以创建接口(interface) Boxable
,然后编辑 Cat
和 Invertebrate
类,以便它们实现该接口(interface)。 实现该接口(interface)的类之间不需要任何关系。这使您可以将类层次结构中的远亲类视为可互换的在有意义的情况下这样做。
关于Java-多态性 : legal vs illegal declarations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838553/