多语言展示
当前在线:965今日阅读:23今日分享:31

证明Java中子类继承了父类的private属性

针对网上流传的两种能与不能的说法,都没有很强说服力的证据。因此,小编使用Android Studio的Debug模式分析了内存变量,发现了子类有父类变量,但最后找到了java官网最权威的解释:子类不能继承父类的私有属性。详细看下面
工具/原料

Android Studio

方法/步骤
1

1、父类Father定义一个private int = 7;的成员变量。public class Father {      private int i = 7;}

2

2、子类Son继承父类Father 。public class Son extends Father {}

3

3、主程序new一个Father对象和new一个Son对象。public class MainActivity extends AppCompatActivity {      @Override         protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                 setContentView(R.layout.activity_main);                 Father father = new Father();                 Son son= new Son();       }}

4

使用Debug模式观察实例化结果。可以看到Son里维护了一个i变量。然而,这并不能证明子类继承了父类私有属性。

5

因此子类直接操作是不可以的,既然是父类的私有成员,那么就可以通过父类方法操作,下面在父类定义了get,set方法。public class Father {   private int i = 7;   public int getI() {        return i;     }   public void setI(int i) {       this.i = i;   }}

7

最后附上java官方文档的解释:Private Members in a SuperclassA subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.A nested class has access to all the private members of its enclosing class—both fields and methods. Therefore, a public or protected nested class inherited by a subclass has indirect access to all of the private members of the superclass.这段话第一句就直接了当说明了子类不能继承父类的私有成员。因此关于能不能继承,若还有疑问,请到java官网查找相关文档。

注意事项

本经验如对你的学习工作有所帮助请点赞。

推荐信息