2017-04-18 6 views
-6

誰も私にそれができない理由を教えてもらえますなぜ私は、基本クラスにスーパークラスオブジェクトを拡張クラスに割り当てることができないのはなぜですか?

class Alpha { 
    String getType() { 
     return "alpha"; 
    } 
} 

class Beta extends Alpha { 
    String getType() { 
     return "beta"; 
    } 
} 


public class Gamma extends Beta { 
    String getType() { 
     return "gamma"; 
    } 

    public static void main(String[] args) { 
     Gamma g1 = new Alpha(); 
     Gamma g2 = new Beta(); 
     System.out.println(g1.getType() + " " 
     + g2.getType()); 
    } 
} 

を私のスーパークラスのオブジェクトを割り当てる傾けます。

+5

すべてのリンゴはフルーツですが、すべてのフルーツがリンゴではありません。 –

+2

(downvoterではない)downvotesの理由:この質問はここで何度も答えられており、ここで質問する前にここやgoogleで検索してください。 –

+0

http://stackoverflow.com/questions/43296084/why-cant-i-assign-a-parent-class-to-a-variable-of-subclass-type/43296186#43296186 – SilverNak

答えて

2

親クラスに子クラスを割り当てようとしています。あなたがしなければならないこととは正反対です。

想像あなたが持っているクラス:

public class Mammal { 
} 

public class Dog extends Mammal { 
} 

public class Cat extends Mammal { 
} 

は、あなたがそれを割り当てることが論理的なことだと思いますか:

Cat cat = new Mammal(); 

がどのMammalCatですか?

0

あなたは、コードのコンパイルにキャストを追加することができます。

package com.stackoverflow.main; 

class Alpha { 
    String getType() { 
     return "alpha"; 
    } 
} 

class Beta extends Alpha { 
    String getType() { 
     return "beta"; 
    } 
} 

public class Gamma extends Beta { 
    String getType() { 
     return "gamma"; 
    } 

    public static void main(String[] args) { 
     Gamma g1 = (Gamma) new Alpha(); 
     Gamma g2 = (Gamma) new Beta(); 
     System.out.println(g1.getType() + " " + g2.getType()); 
    } 
} 

をしかし、Javaで、あなたが

をサブタイプに基本型のインスタンスをキャストすることはできませんので、それはランタイム

Exception in thread "main" java.lang.ClassCastException: com.stackoverflow.main.Alpha cannot be cast to com.stackoverflow.main.Gamma 
    at com.stackoverflow.main.Gamma.main(Gamma.java:21) 

であなたの例外を与えます

1

いいえ。サブクラスへの参照は、それ自身のインスタンスまたはそのサブクラスの1つ(またはnull)を参照する必要があります。それは正しく動作しないためです。

次のプログラムはどのような意味ですか?

Object o = new Object(); 
String s = (string) o; 
int i = s.length(); 
関連する問題