2014-11-25 43 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

相关问题