2015-02-24 15 views
0

我需要一個方法來返回一個類的新對象。該方法在另一個類中(我使用java)。使另一個類的對象的方法

例如:

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

恐怕當我用這個方法兩次,我只會有1個對象,因爲它具有相同的名稱(sale1)。

是否有替代方案或不可能做到這一點?

+3

public sale newSale(){return new Sale();確切地說。 – MarsAtomic 2015-02-24 20:06:51

+0

不要害怕,打開一些基本的Java教程,可以幫助你從這個噩夢! – 2015-02-24 20:15:29

回答

3

每次調用該方法時,這條線將執行:

Sale sale1 = new Sale(); 

...和一個全新的對象將被創建,也沒關係所有是相同的變量名被使用 - 一個新的對象將被分配,同一個名字被重用的事實是不相關的;一個對象不是由它的名字來定義的。現在,你只需要在最後返回它:

return sale1; 
0

不要害怕,這個名字是sale1只能在本地使用按你的方法執行一次,您總能獲得一個新的對象。無論誰撥打newSale,每次通話都會有一個新的Sale實例。

現在,這是非常基本的Java,你應該多一點要求世界前肯定獲得與Java交手;)

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

你讓你創建新的對象new()每一次,不要與引用混淆。

並閱讀教程。

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

0

你從來沒有真正恢復sale1,但如果你沒有他們會是不同的對象。暫時持有對象(技術上對對象的引用)的變量名稱不影響該對象的實際內容。

請記住變量的名稱與對象的名稱不同。例如,考慮以下代碼:

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

在那裏你確實有1個對象被2個變量引用。該對象不是Sale1或Sale2,而是它們自己的實體。

每當你看到new關鍵字一個新的對象被創建(只要該行代碼運行)

2

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"); 
} 
0

基本上它的工作原理,但你必須回到你的新創建的對象。

但我認爲你不太瞭解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的基本文章,以瞭解它如何正常工作。你甚至可以試驗一些簡單的代碼,就像我在理論上爲你做了這個答案。

相關問題