我不知道这种将对象作为参数传递的方式是什么。因此,我不知道要在该网站上搜索什么。如果这已经被问过了,我深表歉意。

有人可以告诉我这两种将对象作为参数传递的方式有什么区别吗?为什么我不能以第一种方式覆盖属性和方法?

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 arg”没有传递给构造函数,正如我所期望的那样。而是抱怨找不到找不到构造函数OtherObject()。
为什么Java无法识别我正在尝试向构造函数发送参数?

谢谢阅读!

最佳答案

当您执行new OtherObject然后打开大括号{ ...时,您正在创建一个新的(匿名)类。不是已经定义的OtherObject类的新Object。看一下Java的匿名类以更好地理解

09-30 12:00