一种制作另一个对象的方法 class

A method that makes objects of another class

我需要一个 returns 一个 class 的新对象的方法。该方法在另一个class中(我使用java)。

例如:

public Sale newSale(){
   Sale sale1 = new Sale();
}

恐怕我两次使用此方法时,我将只有 1 个对象,因为它具有相同的名称 (sale1)。

是否有替代方案或者无法做到这一点?

每次调用该方法时,都会执行此行:

Sale sale1 = new Sale();

... 并且将创建一个全新的对象,完全没有关系 使用相同的变量名 - 将分配一个新对象,重复使用相同名称的事实无关紧要;对象不是由其名称定义的。现在你只需要 return 最后:

return sale1;

别害怕,名称 sale1 只会在每次执行您的方法时在本地使用一次,您将始终获得一个新对象。调用 newSale 的人每次调用都会有一个新的 Sale 实例。

现在,这真的很基础 Java,在向世界提问之前,您一定要多了解 Java ;)

public Sale newSale(){
     return new Sale();
}

每次创建 new() 都在创建一个新对象,请不要与引用混淆。

并阅读教程。

(推荐http://www.java-made-easy.com/)

您实际上从未 return sale1 但如果您这样做了,它们将是不同的对象。 临时保存对象的变量名称(技术上是对对象的引用)不会影响该对象的实际含义。

记住变量的名称与对象的名称不同。例如考虑以下代码:

Sale sale1=new Sale();
Sale sale2=sale1;

你确实有 1 个对象被 2 个变量引用。该对象既不是 Sale1 也不是 Sale2,它是两者引用的自己的实体。

每当您看到 new 关键字时,就会创建一个新对象(每当该行代码运行时)

每次调用 new Sale() 时都会创建一个新的 Sale 对象。

public Sale newSale(){
   Sale sale1 = new Sale();
   return sale1;
}

您可以使用以下方法进行测试:

if(newSale() == newSale()){
  System.out.println("It's the same object!");

} else {
  System.out.println("They are distinct objects");
}

基本上可以,但是您必须 return 您新创建的 object。

但我认为您并不真正了解 OOP 的工作原理。

public class Person {

    private String personName;

    //Cobstructor
    public Person(String name) {
        this.personName = name;
    }

    //Access name of person
    public String getName() {
        return this.personName;
    }

}

这只是一个基本的人class,有一个简单的构造函数和一个我们可以通过"getName()"访问的私有变量。

public class PersonCreator {

    //Constructor
    public PersonCreator() {
        //Empty constructor
    }

    //Create a new person
    public Person createPerson(String name) {
        //Create new instance of class " Person"
        Person aNewPerson = new Person(name);

        //Return the new instance which has been created by the Java VM and is more or less indepent of the identifier
        return aNewPerson;
    }

}

因此,如果您创建 class PersonCreator 的实例并使用它的方法 "createPerson(String name)",它 return 每次都会有一个具有不同变量值的全新 object 等。举个例子:

//Create instance of PersonCreator
PersonCreator pc = new PersonCreator();

//Create two independent, different persons
Person p1 = pc.createPerson("Jeff");
Person p2 = pc.createPerson("Paul");

//Print names of persons
System.out.println(p1.getName());
System.out.println(p2.getName());

输出将是:

Jeff
Paul

如您所见,您使用这段代码创建了类似于您的一个不同的独立实例。

你甚至可以查看那两个地址 instances/objects:

//Print addresses
System.out.println(p1);
System.out.println(p2);

输出会是一些不同的内存地址。这证明您创建了两个不相同的 objects.

此外,您必须提及您的标识符 "sale1" 仅在您的方法中标识一个 object。这就像婴儿在医院出生,在这里医院就是你的方法。他们出院了,那是你的return。但他们可以同名,例如医院里的 Edward。它们是不同的,因为它们有不同的 parents、出生日期等。这是 Java VM 和内存地址的 "handled"。

我建议您阅读一些有关 OOP 的基础文章,以了解它是如何正常工作的。您甚至可以尝试一些简单的代码,就像我在这个答案中理论上为您所做的那样。