我正在准备java考试。请看下面的两个练习。(我有解决方案,但解决方案没有解释)所以如果有人可以检查我的解释,我将不胜感激。
1)
public interface Sale{}
public abstract class Clothing{}
public class Jacket extends Clothing implements Sale{}
public class LeatherJacket extends Jacket{}
以下哪些是可能的:
Sale var1 = new LeatherJacket();
有可能吗,因为 LeatherJacket 是 Jacket 的子类,并且 Jacket 实现了销售? (我只是在这里猜测)。
Sale var2 = new Sale();
不可能。您无法创建接口(interface)类型的对象。
Clothing var3 = new Clothing();
不可能。您无法创建抽象类的对象。
Clothing var4 = new LeatherJacket();
可能,但为什么呢?
Jacket var5 = new LeatherJacket();
可能,但到底为什么?
LeatherJacket var6 = new Object();
不可能,但为什么不呢?
最佳答案
Clothing var4 = new LeatherJacket();
possible, but why?
这是允许的,因为 LeatherJacket
是 Clothing
的派生类。它不通过抽象类Clothing
实例化。它写的是 new LeatherJacket()
而不是 new Clothing()
。
Jacket var5 = new LeatherJacket();
possible, but why exactly?
这是允许的,因为所有皮夹克都是夹克。但反之则不然。就好像所有的狮子都是动物,那么你可以写成:
Animal lion = new Lion(); //where Lion extends Animal
但是你不能把它写成:
Lion lion = new Animal(); //not all animals are lions
<小时/>
LeatherJacket var6 = new Object();
not possible, but why not?
原因与前面的解释相同。 Object
在Java中处于最高层次,每个类都是Object
类的子类。因此,由于处于层次结构的顶部,这是不允许的。但是,这是允许的:
Object var6 = new LeatherJacket(); //allowed (all leather jackets are objects)
LeatherJacket var 6 = new Object(); //not allowed (not all objects are leather jackets)
关于java - 静态和动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41165201/