コードがコンパイルされていない - キャスト

以下のコメントされたコードは、コードがコンパイルされていないと思われる理由です。これは正しいですか?

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);
    }

}

挿入されたコメントは私のものです。なぜ2つのダウン投票、私はちょうどキャスティングの構文が間違っていたことを認識していない。

2
これはSCJPの質問です。
追加された 著者 blue-sky,
このコードは有効なJavaコードではありません。あなたは何をしようとしているのですか?
追加された 著者 Etienne de Martel,

7 答え

キャストしようとしている場合は、正しくありません。 Javaでのキャストは

   Classname objectname =  (ClassName) src;

新しいオブジェクトを構築しようとしている場合は、コンストラクタが必要です。

   Classname objectname = new Classname(constructorArg1, constructorArg2);

最後に、オブジェクトのString表現が必要な場合は、

   String string = objectname.toString(); 
5
追加された

まず、キャスティングの構文が正しくない。

Foo foo = (Foo)bar;

あなたが持っている場所:

Foo foo = Foo(bar);

構文にもかかわらず:

  • 建物を納屋にキャストしようとしました - これは間違っています。バーンです 建物は建物ですが、建物は納屋ではありません。
  • 建物をオブジェクトにキャストしようとしています。これは問題ありません。
  • 建物を文字列にキャストしようとしています。これは間違っています。
  • 納屋をビルにキャストしようとすると、これは問題ありません。
2
追加された
Object obj1 = Object(build1);

コンパイルされません。メソッド Object()はありません。

Object obj1 = (Object) build1;

コンパイルする必要があります。同じ問題が3回あります。

0
追加された

The class building doesn't has a constructor that takes the arguments "Barn".
Make this constructor to fix:
public Building(Barn barn) {
// put your codes here
}

0
追加された

まず、オブジェクトの構築は次のようになります。

YourClass ref = new YourClass();

次に、コンストラクタがどのように見えるかをjavadocにチェックインしてください。オブジェクトストリング

また、ビルドにはデフォルトのコンストラクタしかないので、これが機能することに注意してください。

Building b = new Building();
0
追加された

コメント付きコードがコードがコンパイルされていない理由であるという前提で正しいです。あなたが何をしようとしているのか分かりませんが、ObjectまたはStringにキャストしたい場合は、

    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 ++ ClassName(オブジェクト)からのキャスト構文はJavaでは存在せず、古いスタイルのCキャスト構文(ClassName)オブジェクトのみが存在します。 お役に立てれば。

0
追加された

複数の問題:

  1. build1は建物の納屋ではありません。納屋が必要な場合は、次のように宣言する必要があります ビルドビルド=新しいバーン();

  2. すべてのインスタンスはオブジェクトですが、 Object obj1 = Object(build1); で正確に何をしようとしていますか?あなたが必要とするのは、 Object obj1 = build1; が必要な理由です。

  3. オブジェクトはtoString()を使用して文字列に変換できるため、コードは String str1 = build1.toString()

  4. 最後に、 Building build2 = Building(barn1); を使って何をするのかを真剣に理解していませんが、クローンを作成する必要がある場合は、メソッドを呼び出すことができます。

0
追加された