下面评论的代码是我认为代码没有编译的原因,这是正确的吗?
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 :(得分: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);
语法尽管:
答案 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构造函数的外观:Object,String。
另请注意,Building
只有默认构造函数,因此只有这样才能工作:
Building b = new Building();
答案 5 :(得分:0)
多个问题:
build1不是谷仓,它是建筑物。如果你需要一个谷仓,它应该声明如下
Building build1 = new Barn();
无论如何,每个实例都是一个对象,你在Object obj1 = Object(build1);
尝试了什么?我想你只需要Object obj1 = build1;
(为什么你需要它,而不是从问题中提供的代码示例中理解)
可以使用toString()将对象转换为字符串,因此您的代码应为String str1 = build1.toString();
最后,我并不真正理解您对Building build2 = Building(barn1);
的意思,但如果您需要克隆,您可以编写构造函数或实现可以克隆的方法。
答案 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)对象。 希望这会有所帮助。