java成员变量父类和子类之间的可见性

时间:2016-09-27 12:33:32

标签: java

我创建了以下代码:

print(...,  flush=True)

我的问题是为什么super.num会打印20?我认为super.num是10.因为变量num在父子之间是无关的。 Child中的变量num只是来自Father的副本。谁能告诉我为什么?

5 个答案:

答案 0 :(得分:4)

Child类从Parent类继承num。它没有副本,但确实是这个类的所有者。

我会给你举个例子 - 让我们说父母是水果,而数字是味道 - 当一个小孩(比如苹果)继承水果 - 它拥有属性的味道。即使“味道”被默认为“中性” - 苹果也会将味道改为“appleTaste”,每当你吃(即打印apple.taste)甚至使用super时,它都会输出“appleTaste”而不是默认的味道值。重要的是要理解“num”或“taste”属于“instance”,因此,最终实例“apple”或“child”决定了该值。

从现实世界中为您提供这个例子,通过类比和您可以想象的东西来理解它。

答案 1 :(得分:2)

  

Child中的变量num只是父亲的副本。

不,绝对不是。 num在父类Father中定义。由于继承,Child可以访问它。

当你写child.setNum(20);时,它实际上是Father中使用的函数。

答案 2 :(得分:1)

  

因为变量numFatherChild

之间无关

事实并非如此。 Child扩展了Father定义包含成员num。它可以从子类访问,因此允许它们(直接)更改它的值,或者通过调用setter方法(也可以从Father的子类访问)< / p>

答案 3 :(得分:0)

super.num将打印20,因为那些关键字&#34; super&#34;表示父类的引用,它实例化子类。 egIt相当于ParentClass p = new ChildClass();

refernce(p)是Parent Class,但它仍然指向Subclass对象。

答案 4 :(得分:0)

变量num 不是父类中变量的副本。它是继承

请注意num是一个实例变量。每个Father实例都存在一个副本。由于Child extends FatherChild的每个实例都是Father的实例,但具有Child类定义的附加功能。