2016-12-15 7 views
0

私はjavaで試験を準備しています。次の2つの練習を見てください(私は解決策を持っていますが、解決策は説明がありません)。誰かが私の説明を確認できれば、それは大いに感謝しています。静的および動的タイプ

1)

public interface Sale{} 
public abstract class Clothing{} 
public class Jacket extends Clothing implements Sale{} 
public class LeatherJacket extends Jacket{} 

次のうちどれ可能です。LeatherJacketはジャケットとジャケット道具販売のサブクラスであるため、

Sale var1 = new LeatherJacket(); 

は、可能ですか? (私はちょうどここに推測している)。

Sale var2 = new Sale(); 

不可能です。インターフェイスタイプのオブジェクトは作成できません。

Clothing var3 = new Clothing(); 

不可能です。抽象クラスのオブジェクトを作成することはできません。

Clothing var4 = new LeatherJacket(); 

可能ですが、なぜですか?

Jacket var5 = new LeatherJacket(); 

可能ですが、どうしてですか?

LeatherJacket var6 = new Object(); 

しかし、どうしてですか?

答えて

0
Clothing var4 = new LeatherJacket(); 

LeatherJacketは、衣類を伸ばしているジャケットを伸ばしています。

Jacket var5 = new LeatherJacket(); 

LeatherJacketジャケット

LeatherJacket var6 = new Object(); 

オブジェクトは、すべてのスーパークラスで延びています。あなたはそれを行うことはできませんが、それは不可能です。オブジェクトo =新しいLeatherJacket();

1
Clothing var4 = new LeatherJacket(); 
可能

が、なぜ?

LeatherJacketは、Clothingの派生クラスであるため、これは許可されています。 ではなく、抽象クラスClothingでインスタンス化しています。それはnew LeatherJacket()で、new Clothing()ではありません。


Jacket var5 = new LeatherJacket(); 
可能

が、なぜ正確?

これはすべてのレザージャケットがジャケットであるためです。しかし、その逆は真実ではありません。

Animal lion = new Lion(); //where Lion extends Animal 

しかし、あなたのようにそれを書くことができません:それはすべてのライオンズは動物であるように、そしてあなたのようにそれを書くことができている

Lion lion = new Animal(); //not all animals are lions 

LeatherJacket var6 = new Object(); 

ない可能性が、何故なの?

この理由は、前の説明と同じです。 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) 
+0

回答ありがとうございます。したがって、最初の1つのvar1はSale型の変数で、LeatherJacketのオブジェクトを格納します。次に、以下のことも真でなければなりません:Sale var7 = new Jacket();? – DerDieDasEhochWas

+0

@DerDieDasEhochWasはい、あなたは両方の前提にぴったりです。それが役立つ場合は、ソリューションの横にある中空の見た目のダニをクリックすることで、あなたを最も助けてくれた**ワン**ソリューションを受け入れることができます。 – user3437460

0

あなたはこのような階層構造を持っている場合、あなたはベン図を経由して、それを認知することができます。以下は、どのようなあなたに非常に良い手がかりを与える必要があります

enter image description here

許可されており、許可されていません:

Object o = new Clothing();  //not allowed (Clothing is abstract!) 
Object o = new Jacket();   //allowed (jacket is a subset of object) 
OBject o = new LaatherJacket(); //allowed (leather jacket is a subset of object) 

Clothing c = new Object();  //not allowed (Object is not a subset of clothing, cannot assume object is definitely a Clothing) 
Clothing c = new Jacket();  //allowed (jacket is a subset of Clothing) 
Clothing c = new LaatherJacket(); //allowed (leather jacket is a subset of Clothing) 

Jacket j = new Object();   //not allowed (Object is not a subset of jacket, cannot assume object is definitely a jacket) 
Jacket j = new Clothing();  //not allowed (Clothing is abstract!) 
Jacket j = new LeatherJacket(); //allowed (leather jacket is a subset of jacket) 

LeatherJacket j = new Object;  //not allowed (Object is not a subset of jacket, cannot assume object is definitely a leather jacket) 
LeatherJacket j = new Clothing(); //not allowed (Clothing is abstract!) 
LeatherJacket j = new Jacket(); //not allowed (Jacket is not a subset of jacket, cannot assume jacket is definitely a leatherjacket) 
関連する問題