2015-10-06 47 views
-4

對象讓我們假設有:簡單的方法來創建一個從基類

class A { 
} 

class B extends A { 

    B(A object) { 
    this = object; //this is not possible. 
    } 
} 

我們知道,我們不能設置在爪哇(本)的任何值的關鍵字。有沒有簡單的方法來創建與A對象具有相同字段值的B對象?

+2

你的意思是如何創建一個拷貝構造函數的最簡單的方法? –

+0

yeap。這是非常荒謬的問題嗎?我得到了負面的點 – user14570

+1

我不認爲這是荒謬的,但看起來你甚至沒有嘗試過。我只是簡單地在基類和子類中調用'super(a);'創建拷貝構造函數。現在,如果你天真地問*我應該手動生成幾個字段的副本嗎?答案是:確保它通過手動或代碼生成工具完成,但代碼必須在那裏。 –

回答

2

最簡單的方法是逐個複製所有字段。沒有更簡單的方法。你可以寫一個工具爲你生成這段代碼。總的來說,這在Java中可以避免(可能是因爲它很痛苦且容易出錯),而且如果沒有更簡單的解決方案來解決問題,通常會使用委派。即通常有替代方案。

+0

嗯,我明白了。順便說一下,Java是否具有:像C#那樣的新A(){this.f = f,...}語法呢? – user14570

+1

@ user14570,這個系列演示了您必須學習Java的基礎知識。如果你不會花時間去學習基礎知識,不要急於完成某些事情。 –

1

這不能作爲變量這是最後一個。所以,你可以做這樣的事情:

public class A { 

     private String hello; 
     private String something; 

     public A(String hello, String something){ 
      this.hello = hello; 
      this.something = something; 
     } 

     public String getHello() { 
      return hello; 
     } 

     public void setHello(String hello) { 
      this.hello = hello; 
     } 

     public String getSomething() { 
      return something; 
     } 

     public void setSomething(String something) { 
      this.something = something; 
     } 

} 

然後,您可以使用A類B中,如下:

public class B extends A{ 

     public B(A object) { 
     super(object.getHello(),object.getSomething()); 
     } 

    } 
相關問題