Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用所有者的方法?_Java_Design Patterns - Fatal编程技术网

Java 如何调用所有者的方法?

Java 如何调用所有者的方法?,java,design-patterns,Java,Design Patterns,我有Class1,它有方法: 设置某物 createObjectOfClass2 现在,当我创建Class2的对象时,是否可以从中调用setSomething方法?如果Class2没有扩展Class1,那么您可以在Class1的任何实例上调用setSomething,如果它不是静态方法: Class1 c = new Class1(); c.setSomething(); 如果您愿意,但是您引入了耦合,这将使以后分离功能变得非常困难。只需将setSomething公开,并将对第一个对象的引用传

我有Class1,它有方法:

设置某物 createObjectOfClass2
现在,当我创建Class2的对象时,是否可以从中调用setSomething方法?

如果Class2没有扩展Class1,那么您可以在Class1的任何实例上调用setSomething,如果它不是静态方法:

Class1 c = new Class1();
c.setSomething();

如果您愿意,但是您引入了耦合,这将使以后分离功能变得非常困难。只需将setSomething公开,并将对第一个对象的引用传递给第二个对象的构造函数

public class Class1 {
    Class2 object2 = null;

    public void setSomething(Object something) { ... }

    public void createObjectOfClass2() {
        object2 = new Class2(this);
    }
}

public class Class2 {
    public Class2(Class1 parent) {
        parent.setSomething(new Foo());
    }
}

调用Parent.this.method

e、 g:


Class2似乎不是Class1的子类。我用一个糟糕的标题迷惑了你。Class2不是从class1派生出来的。@joseph:那么编辑它吧,parent的方法记住Class2扩展了Class2Class1 parent—对于不是从class1继承Class2的参数来说,这个名字很奇怪。Roman:parent在原始标题中,所以我使用了它。我认为这很合适:我个人不喜欢用parent作为超类的笔名。不过,正如您在另一篇评论中所说,如果您愿意,owner fits也可以随意更改。但我不想创建新实例,我需要从实例中调用它,它创建了class2-1,并带有一个误导性的标题,您让所有试图回答的人和您自己都感到沮丧。您能给出一个具体的示例说明您正在尝试做什么吗?
public class K1
{
public class K2
    {
    public void hello()
        {
        K1.this.setSomething();
        }

    } 

public void setSomething()
   {
   System.out.println("Set Something");
   }

public K2 createObjectOfClass2()
   {
   return new K2();
   }

public static void main(String args[])
   {
   new K1().createObjectOfClass2().hello();
   }


}