我创建了以下代码:
print(..., flush=True)
我的问题是为什么super.num会打印20?我认为super.num是10.因为变量num在父子之间是无关的。 Child中的变量num只是来自Father的副本。谁能告诉我为什么?
答案 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)
因为变量
之间无关num
在Father
和Child
事实并非如此。 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 Father
,Child
的每个实例都是Father
的实例,但具有Child
类定义的附加功能。