子类super调用父类函数,该函数中调用的函数是父类还子类呢

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ningyanggege/article/details/89337860

如图所示:

子类对象通过super()函数调用父类的run函数,然后直接调用了子类的demo函数,而没有调用父类的函数;猜想通过super调用父类,但self仍然代表是子类本身;

再看一例:

从这里说明self代表是子类本身;super的直接将run代码copy到子类中来;
 还看一例:

 从这里就说明了一切,通过super函数调用父类函数,等同于将父类中的函数copy到子类中执行;对象仍然是子类;而不是父类

raise NotImplementedError可用于父类虚函数的功能

展开阅读全文

关于子类调用private函数的疑惑。

09-02

最近看thinking in java时遇到了一点问题,请教一下大家。rn示例代码如下:rn[code=Java]rnabstract class Father rn private void test() rn System.out.println("this is Father.test()");rn rn abstract void show();rn Father() rn System.out.println("this is Father.Father()");rn show();rn test();rn rnrnrnpublic class Child extends Father rn int radius;rn void show()rn System.out.println("this is Child.show(),radius = " + radius);rn rn Child(int r)rn radius = r;rn show();rn rn /**rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrn new Child(7);rn rnrn[/code]rnrn运行结果如下:rn[code=Java]rnthis is Father.Father()rnthis is Child.show(),radius = 0rnthis is Father.test()rnthis is Child.show(),radius = 7rn[/code]rnrn[b]我的理解:[/b]rn首先我建造了一个抽象的父类Father类,其中有一个私有的函数test(),一个抽象的函数show(),然后rn在Father的构造函数中,我调用了这两个函数。之后我建造了子类Child类,继承了父类Father类,并实rn现了Father类的抽象函数show(),在Child类的main函数中我创建了一个Child类的实例。rnrnrn[b]疑惑:[/b]rn按照初始化的顺序,我的理解是:rn(1)首先分配给Child对象的成员变量radius初始值0.rn(2)之后调用Father的构造函数,由于多态的特性调用show()函数时,实际上调用的是Child重写的show()函数。rn[color=#FF0000]rn(3)按照show()函数的打印结果,test()函数也应该像show()函数一样执行,由Child对象来调用,但是由于test()函数是private的,Child应该调用不到test()函数。而且abstract类是不会生成对象的,我不明白为什么会产生这样的打印结果?按照这个打印结果,那说明执行了一个this.test()的操作,但是abstract类是不会产生对象的呀。rn(4)还有就是按照我写的这个程序,会不会产生一个Father的对象?rn[/color]rnrnrnrnrnrnrnrnrnrnrnrnrnrn 论坛

没有更多推荐了,返回首页