2014-11-25 133 views
-1

我需要修改jar文件中某個類的某些功能。 因爲我需要保留大部分功能,所以我想擴展所需的類並覆蓋應該改變的方法。如果子類與父類中的私有變量具有相同名稱的變量,將使用什麼?

但一些變量被聲明爲私人,所以我無法訪問它們。 因此如果我在子類中聲明一個具有相同名稱的對象會發生什麼? (見例子)

package abc; 

class Parent { 
    private Object var; 

    String func_1() { 
     //do something to var 
     func_2(); 
    } 

    void func_2() { 
    //do something to var 
    } 
} 

而子類:

package abc; 

class Child extends Parent { 
    private Object var; 

    /* @Override */ 
    String func_1(){ 
     //do something to var 
     func_2();  
    } 
} 

func_2操縱家長var或子女var

+0

[基本和派生類共享變量時會發生什麼]的可能重複(http://stackoverflow.com/questions/5630486/what-happens-when-base-and-derived-classes-share-a-variable ) – 2014-11-25 08:30:33

+1

你爲什麼不測試它?爲每個私有變量分配不同的值,並在'func_2'中輸出變量值。或者使用你的調試器。 – 2014-11-25 08:31:15

+0

就「Child」而言,Parent.var不存在。就「Parent」而言,「Child.var」不存在。每個人都使用自己的價值。 – 2014-11-25 08:31:56

回答

1

func_2將操縱Parentvar,因爲你不能覆蓋類成員和func_2僅在Parent實現。

另一方面,Child類中的任何代碼都會操縱Child類的var

+0

謝謝。那麼無論如何,我可以訪問從父類Child中的var? – Sach 2014-11-25 08:37:36

+2

@Sachini沒有傳統的方法來做到這一點。我認爲你可以用反射來完成它,但是如果Parent var被聲明爲private,它並不意味着被子類訪問,你應該尊重它。它可能不會存在於父類的未來版本中,所以你的代碼不應該依賴它。 – Eran 2014-11-25 08:43:28

1

私有成員僅在定義的類中可見。所以func_2將使用Parent類中的var

+0

謝謝。那麼無論如何,我可以訪問從父類Child中的var? – Sach 2014-11-25 08:36:50

+2

@Sachini no。關鍵在於'私人'。你可以使用反射,但這只是一個骯髒的黑客。 – 2014-11-25 08:37:32

+1

@Sachini,不改變變數的範圍,你不能。否則,你必須使用反射 – 2014-11-25 08:42:01

相關問題