2011-11-24 81 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)对象。 希望这有助于。