2011-11-24 80 views
-2

以下評論代碼是我認爲代碼沒有編譯的原因,這是正確的嗎?代碼不編譯 - 鑄造

class Building { 

} 


public class Barn extends Building{ 

    public static void main(String args[]){ 
     Building build1 = new Building(); 
     Barn barn1 = new Barn(); 
     Barn barn2 = (Barn)build1; 

     /** 
     * Object is not a Building 
     * Building is an Object 
     */ 
     Object obj1 = Object(build1); 

     /** 
     * String is not a Building 
     */ 
     String str1 = String(build1); 

     /** 
     * Building is not a Barn 
     * Barn is a Building 
     */ 
     Building build2 = Building(barn1); 
    } 

} 

插入的評論是我自己的。爲什麼這兩個回票,我只是沒有意識到鑄造語法是不正確的。

+0

此代碼不是有效的Java代碼。你想做什麼? –

+0

這是一個SCJP問題。 –

回答

5

如果你想投,沒有它是不正確的。在Java中鑄造通過

Classname objectname = (ClassName) src; 

如果你正在嘗試構建新的對象完成的,你需要構造函數和你通過

Classname objectname = new Classname(constructorArg1, constructorArg2); 

做到最後,如果你想要一個對象的字符串表示,您使用

String string = objectname.toString(); 
0

這個類的構建沒有一個構造函數,它帶有參數「Barn」。
使這個構造函數來解決:
public Building(Barn barn) {
// put your codes here
}

0
Object obj1 = Object(build1); 

不會編譯。沒有方法Object()

Object obj1 = (Object) build1; 

應該編譯。你有三次相同的問題。

0

首先,構建對象應該是這樣的:

YourClass ref = new YourClass(); 

其次,嘗試檢查在Javadoc構造如何看起來像:ObjectString

還要注意Building只有默認的構造函數,所以只有這將工作:

Building b = new Building(); 
2

首先,鑄造語法不正確,應該是

Foo foo = (Foo)bar; 

,你必須:

Foo foo = Foo(bar); 

儘管語法:

  • 您嘗試投了建設穀倉 - 這是不正確。穀倉 a 建築但建築物不是穀倉。
  • 您嘗試將建築物投射到對象。這會很好。
  • 您嘗試將建築物轉換爲字符串。這是不正確的。
  • 您嘗試將一個穀倉投入建築物 - 這樣可以。
0

多個問題:

  1. build1中是不是一個穀倉,其樓宇。如果你需要一個穀倉,應該聲明如下 Building build1 = new Barn();

  2. 每個實例是一個對象不管怎麼說,究竟是你想Object obj1 = Object(build1);?我猜你只需要Object obj1 = build1;(爲什麼你需要它超出了在這個問題提供了代碼示例理解)

  3. 對象可以轉換爲使用的toString()字符串,所以你的代碼應該是String str1 = build1.toString();

  4. 最後,我並不真正明白你的意思是用Building build2 = Building(barn1);來做什麼,但是如果你需要克隆,你可以寫一個構造函數或者實現一個可以克隆的方法。

0

你是正確的假設,評論代碼是代碼不編譯的原因。我不知道你正在嘗試做的,但如果你要投射到對象或字符串,你應該有

Object obj1 = (Object) build1;    // This is OK, because all classes are 
               // considered to extend Object class 
    String str1 = build1.toString();   // You can not cast to String, because 
               // neither of your classes extend String class 
               // But you can use the toString() method 
               // that is defined in Object class 

    Building build2 = (Building) barn1;  // This is OK, because Barn class extends 
               // Building class 

從C++類名(對象)鑄造的語法不存在在Java中,只有老C風格鑄造語法是(ClassName)對象。 希望這有助於。