2012-04-01 84 views
-1

類以外是對於B類A.內部類延伸的C類這也是A.內部類鑄造的內子類到另一個內父類B類別

class A{ 

    class C{ 

    } 
     class B extends C{ 

     } 

    }. 

如何投物體C類從A類以外的類型B? 我試圖(AB)objectOfC,但這不起作用


行,所以我得到的錯誤是Java問我把「)」之後「(A」。當我這樣做,它說, 「表達的非法的開始

+0

你爲什麼試圖沮喪? (即從基類轉換爲派生類) – 2012-04-01 01:26:15

+0

我知道我想要投射的對象是B類型的,我想調用它的一個方法,它是特定於類B(子類)和不是C類(父類)。我不能在C中實現該方法,因爲那樣我就不得不在C的其他類中重寫它,而我不想那樣做。 – FranXh 2012-04-01 01:28:43

+0

如果你知道你有一個'B'的實例,那麼你爲什麼不引用一個'B'而不是'C'? – 2012-04-01 01:29:40

回答

2
class A { 
    class C {} 
    class B extends C {} 
    B b() { 
     return new B(); 
    } 
} 
public class So9961167 { 
    public static void main(String[] args) { 
     A a=new A(); 
     A.C b=a.b(); 
     if(b instanceof A.B) { 
      A.B b2=(A.B)b; 
      System.out.println("it worked!"); 
     } 
    } 
} 
+0

這可以在C類內部工作,但在外部,在下面的線上: A.B b2 =(A.B)b; java說:「)」預期後(A. – FranXh 2012-04-01 02:18:34

+0

工作正常我使用jdk1.7 – 2012-04-01 02:21:12

+0

我想你是對的!編譯器故障!!!我使用Dr.Java,jdk 5.0,當我轉身到Eclipse它的作品。謝謝! – FranXh 2012-04-01 02:36:39

0

這裏有一個簡單的方法來記住鑄造是如何工作的:

一個孩子像他的父母 - 因爲繼承自父孩子

父母不喜歡他的孩子 - 因爲父母沒有繼承他的孩子。

因此,您無法將C語言轉換爲B語言 - 這在自然界和編程中是不可能的。

+0

如果底層對象確實是'B',則可以。 – 2012-04-01 01:46:52

+0

你可以,我已經在A班內部完成了並且工作,沒問題。但是,當我在課外時,我面臨着問題 – FranXh 2012-04-01 02:07:54