我需要一個方法來返回一個類的新對象。該方法在另一個類中(我使用java)。使另一個類的對象的方法
例如:
public Sale newSale(){
Sale sale1 = new Sale();
}
恐怕當我用這個方法兩次,我只會有1個對象,因爲它具有相同的名稱(sale1
)。
是否有替代方案或不可能做到這一點?
我需要一個方法來返回一個類的新對象。該方法在另一個類中(我使用java)。使另一個類的對象的方法
例如:
public Sale newSale(){
Sale sale1 = new Sale();
}
恐怕當我用這個方法兩次,我只會有1個對象,因爲它具有相同的名稱(sale1
)。
是否有替代方案或不可能做到這一點?
每次調用該方法時,這條線將執行:
Sale sale1 = new Sale();
...和一個全新的對象將被創建,也沒關係所有是相同的變量名被使用 - 一個新的對象將被分配,同一個名字被重用的事實是不相關的;一個對象不是由它的名字來定義的。現在,你只需要在最後返回它:
return sale1;
不要害怕,這個名字是sale1
只能在本地使用按你的方法執行一次,您總能獲得一個新的對象。無論誰撥打newSale
,每次通話都會有一個新的Sale
實例。
現在,這是非常基本的Java,你應該多一點要求世界前肯定獲得與Java交手;)
public Sale newSale(){
return new Sale();
}
你讓你創建新的對象new()
每一次,不要與引用混淆。
並閱讀教程。
你從來沒有真正恢復sale1,但如果你沒有他們會是不同的對象。暫時持有對象(技術上對對象的引用)的變量名稱不影響該對象的實際內容。
請記住變量的名稱與對象的名稱不同。例如,考慮以下代碼:
Sale sale1=new Sale();
Sale sale2=sale1;
在那裏你確實有1個對象被2個變量引用。該對象不是Sale1或Sale2,而是它們自己的實體。
每當你看到new
關鍵字一個新的對象被創建(只要該行代碼運行)
新Sale
對象被創建每次new 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");
}
基本上它的工作原理,但你必須回到你的新創建的對象。
但我認爲你不太瞭解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;
}
}
這僅僅是一個基本的人類一個簡單的構造,我們可以通過「的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;
}
}
所以如果你創建類PersonCreator的實例,並使用它的方法「createPerson(字符串名稱)」,它每次返回不同的變量值等只是一個例子一個完整的新的對象:
//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
正如你可以看到你這段代碼,類似於你一個,不同的,獨立實例創建。
你甚至可以檢查這兩個實例/對象的地址:
//Print addresses
System.out.println(p1);
System.out.println(p2);
輸出會出現一些不同的memoty地址。這證明你創建了兩個不相同的對象。
此外,您必須提及您的標識符「sale1」只能標識您的方法中的一個對象。這就像在醫院出生的嬰兒,在這裏醫院是你的方法。他們離開醫院,那是你的回報。但他們都可以在醫院裏有同樣的名字,比如愛德華。它們是不同的,因爲它們有不同的父母,出生日期等。這是由Java VM和內存地址「處理」的。
我建議你閱讀一些關於OOP的基本文章,以瞭解它如何正常工作。你甚至可以試驗一些簡單的代碼,就像我在理論上爲你做了這個答案。
public sale newSale(){return new Sale();確切地說。 – MarsAtomic 2015-02-24 20:06:51
不要害怕,打開一些基本的Java教程,可以幫助你從這個噩夢! – 2015-02-24 20:15:29