2013-03-09 67 views
1

在java中我有一個擴展的B類的Java從一個超類傳輸變量到子類

A級我想分配所有的內容從B級到A級 事情是我想做的事它從A類內部現在看來似乎很容易做到只是傳輸所有變量。

這是最難的部分。我沒有使B類是它的一部分android.widget 在C++中,你只需要在類B中,然後分配給*這個和投它。

我會如何去做這個在java中?

爲了進一步澄清這是一個RelativeLayout的我需要一個RelativeLayout的所有內容複製到擴展相對佈局

class something extends other 
{ 
public something(other a){ 
//transfer all of the other class into something 
this=(something)a; // obviously doesn't work 
//*this doesn't exist? 
//too many variables to transfer manually 
} 
} 

非常感謝所有幫助的類。真的很感激!

+0

當你擴展一個特定的類時,你會自動繼承該類的所有屬性..是嗎? – Anubhab 2013-03-09 18:44:07

+1

我認爲他有一個A類對象和一個B類對象,並且希望將B類的字段值複製到A類的對象中。 – 2013-03-09 18:45:09

+0

「other a」引用的對象的確切類型是什麼?如果它是類'東西',那麼你的代碼肯定會工作.. – 2013-03-09 18:47:28

回答

3

請參閱下面的代碼。它使用java.lang.reflect包從超級類中提取出所有字段,並將獲得的值分配給子類變量。

import java.lang.reflect.Field; 
class Super 
{ 
    public int a ; 
    public String name; 
    Super(){} 
    Super(int a, String name) 
    { 
     this.a = a; 
     this.name = name; 
    } 
} 
class Child extends Super 
{ 
    public Child(Super other) 
    { 
     try{ 
     Class clazz = Super.class; 
     Field[] fields = clazz.getFields();//Gives all declared public fields and inherited public fields of Super class 
     for (Field field : fields) 
     { 
      Class type = field.getType(); 
      Object obj = field.get(other); 
      this.getClass().getField(field.getName()).set(this,obj); 
     } 
     }catch(Exception ex){ex.printStackTrace();} 
    } 
    public static void main(String st[]) 
    { 
     Super ss = new Super(19,"Michael"); 
     Child ch = new Child(ss); 
     System.out.println("ch.a="+ch.a+" , ch.name="+ch.name); 
    } 
} 
+0

我將不得不給這個坐下來看看它是否有效。我在我的案例中做了一些工作,但實際上並沒有回答這個問題。但我得晚點看看。感謝似乎是真正的交易壽:D – 2013-03-10 00:48:12

+0

這不會在私人領域的權利?可能會成爲一個問題。如果android.widget.RelativeLayout有真正非常重要的私人領域,而不是保護?有誰知道? – 2013-03-10 00:50:25

+1

@Lpc_dark:超級類的私有字段永遠不會被子類訪問。只允許超級類來處理它的私有字段。這是按照壓倒一切的規則.. – 2013-03-10 05:38:08

0

父類(非私有)的所有變量和函數都是子類中的直接訪問。您不需要在子類中分配任何東西。您可以直接訪問。

+1

正如我在這個問題中評論的那樣,我認爲他有一個A類對象和一個B類對象,並且希望將B類的字段值複製到A類對象中。 – 2013-03-09 18:47:11

+0

是的,這就是我想要的。我需要反對b場複製到對象A,因爲對象A擴展B – 2013-03-09 18:57:29

0

這將工作:

Something something = (Something) other.clone();

如果其他的真正運行時類型Other

相反,您必須創建一個拷貝構造函數,或將other實例化爲Something的一個實例,然後克隆它。

+0

該對象是一個android.widget.RelativeLayout我將無法訪問它的所有東西手動複製它 – 2013-03-09 19:05:53