我不知道这种将对象作为参数传递的方法是什么。所以我不知道在网站上搜索什么。如果之前有人问过,我很抱歉,我肯定已经问过了。
有人能告诉我,这两种将对象作为参数传递的方式有什么区别吗?为什么我不能以第一种方式覆盖属性和方法?
myObject.doSomethingWithOtherObject((new OtherObject() {
// why can't I override properties here?
public String toString () {
return "I am the other object.";
}
...
}));myOtherObject = new OtherObject();
myObject.doSomethingWithOtherObject(myOtherObject);,那么我还有第二个问题,但也许回答第一个问题也会回答这个问题。为什么这不起作用:
public class OtherObject {
public OtherObject (String str) {
super();
}
}
myObject.doSomethingWithOtherObject((new OtherObject("string arg") {
public void overrideSomething () {
}
}));字符串"string“不会像我所期望的那样传递给构造函数。相反,在抱怨找不到构造函数时,OtherObject()。为什么Java不认识到我试图向构造函数发送一个参数?
感谢您的阅读!
发布于 2015-06-16 07:43:50
当您执行new OtherObject,然后打开花括号{ ...时,您将创建一个新的(匿名)类。而不是已经定义的OtherObject类的新对象。查看Java的匿名类,以更好地理解
发布于 2015-06-16 07:45:11
第一个是匿名类。这意味着您实际上实例化了一个没有名称的子类,以便覆盖某些内容。
在第二个例子中,编译器会抱怨您没有构造函数。正如对第一个问题的回答中所描述的,您实际上是在这里进行子类化,这意味着您必须定义一个构造函数(如果需要的话)。
发布于 2015-06-16 07:53:34
你的代码:
myObject.doSomethingWithOtherObject((new OtherObject() {
// why can't I override properties here?
public String toString () {
return "I am the other object.";
}
...
}));大致相当于:
class OtherSubObject extends OtherObject {
public String toString () {
return "I am the other object.";
}
}
...
myObject.doSomethingWithOtherObject(new OtherSubObject());但是,OtherObject的子类是在没有名称的情况下创建的(即匿名的),因此不能引用其他任何地方。
你的代码:
myOtherObject = new OtherObject();
myObject.doSomethingWithOtherObject(myOtherObject);不创建新类,它只是将OtherObject的一个实例作为参数传递。
https://stackoverflow.com/questions/30861564
复制相似问题