代码不编译 - 投射

时间:2011-11-24 21:01:17

标签: java

下面评论的代码是我认为代码没有编译的原因,这是正确的吗?

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

}

插入的评论是我自己的。为什么两个下选票,我只是没有意识到转换语法不正确。

7 个答案:

答案 0 :(得分:5)

如果你想要施放,不是不正确。使用Java进行转换是通过

完成的
   Classname objectname =  (ClassName) src;

如果您正在尝试构造新对象,则需要构造函数,并且您可以通过

执行此操作
   Classname objectname = new Classname(constructorArg1, constructorArg2);

最后,如果您想要对象的String表示,请使用

   String string = objectname.toString(); 

答案 1 :(得分:2)

首先,转换语法不正确,应该是

Foo foo = (Foo)bar;

你有:

Foo foo = Foo(bar);

语法尽管:

  • 您尝试将建筑物投射到谷仓 - 这是不正确的。谷仓 a 建筑物,但建筑物不是谷仓。
  • 您尝试将建筑物投射到对象。这没关系。
  • 您尝试将建筑物转换为字符串。这是不正确的。
  • 你试图将一个谷仓投射到建筑物 - 这没关系。

答案 2 :(得分:0)

类构建没有带参数“Barn”的构造函数 使这个构造函数修复:
public Building(Barn barn) {
// put your codes here
}

答案 3 :(得分:0)

Object obj1 = Object(build1);

不会编译。没有方法Object()

Object obj1 = (Object) build1;

应该编译。你有3次同样的问题。

答案 4 :(得分:0)

首先,构建对象应如下所示:

YourClass ref = new YourClass();

其次,请尝试检查javadoc构造函数的外观:ObjectString

另请注意,Building只有默认构造函数,因此只有这样才能工作:

Building b = new Building();

答案 5 :(得分: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);的意思,但如果您需要克隆,您可以编写构造函数或实现可以克隆的方法。

    < / LI>

答案 6 :(得分: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

在Java中不存在来自C ++ ClassName(object)的转换语法,只有旧式C转换语法是(ClassName)对象。 希望这会有所帮助。