2017-04-01 125 views
-5

爲什麼這段代碼不工作?當我鑄造,我得到了線程「主要」 java.lang.ClassCastException ClassCastExeption 例外:不能投在HelloWorld.mainJava向下擴展類

public class HelloWorld 
{ 
public static void main(String[] args) 
    { 
    B b1 = (B)new A(); 
    b1.a(); 
    } 
} 

public class A 
{ 
    public void a(){ 
    System.out.println("A.a"); 
    } 
    public void b(){ 
    System.out.println("A.b"); 
    } 
} 

public class B extends A{ 
} 
+2

因爲您不能將'A'投射到'B'。 –

+0

我建議你閱讀繼承的基礎知識,它是如何工作的,你不能將父母轉交給孩子...... –

+0

你聲明B是一種A.這並不意味着A是一種B.然後你'說'這個A是B'。編譯器抱怨。 – pvg

回答

2

鑄造不能總是以兩種方式進行到B 。

如果你正在創建一個動物,通過調用「new Animal()」,你正在創建一個動物對象,但它不能被降級爲Dog。因爲它不是狗。

但是,當您通過調用「new Dog()」創建一個Dog時,則可以將其更改爲「Animal」並將其向下轉換回「Dog」。

Dog dog = new Dog();   
Animal animal = dog;   //upcasting to Animal 
if(animal instanceof Dog){ // testing if the Animal is a Dog  
    Dog dog2 = (Dog) animal; //downcast 
} 
+0

啊哈!謝謝!只有在上傳之後才能向下轉換!現在它清晰! –

+0

@ A.Kashnikov而且應該幾乎永遠不會被使用。 – chrylis

+0

對!他應該在java中更多地瞭解繼承概念,以便很好地理解這一點。 – Oghli