各个编程语言有没有强迫子类初始化父类变量的机制
Delphi的构造函数是你主动调用父类构造函数的,这也意味着你可以调用0次、1次、2次、3次……
■网友
Java是这样的,父类有构造函数,子类构造函数必定会调用父类构造函数。这种调用可以是程序员显式调用,也可以是Java编译器帮你隐式调用。-----2014.10.5 19:57更新-----回答 @马小飞 的问题。对于父类是抽象类的情况,抽象类也可以有构造函数。import java.io.*;import java.util.*;public class Main {\tpublic static void main(String args) {\t\tnew Lower("jack").foo();\t}\tpublic static abstract class Upper {\t\tprivate String name;\t\tpublic Upper(String name) {\t\t\tthis.name = name;\t\t}\t\tpublic String getName() {\t\t\treturn name;\t\t}\t\tpublic abstract void foo();\t}\tpublic static class Lower extends Upper {\t\t\t\tpublic Lower(String name) {\t\t\tsuper(name);\t\t}\t\tpublic void foo() {\t\t\tSystem.out.println("My name is " + getName());\t\t}\t}}
■网友
Python 需要显式的调用父类的构造函数.-----------------------------------------------------需要调用构造函数的原因跟 Java 一样 (先看 雷力明 解释Java ). 但是由于 Python 只有一个构造函数 , 有时候有参数有是有没参数 参数个数和类型也不相同 .同时 Python 又不能编译阶段自动加上无参数的构造 , 所以所有的子类不管怎样都要 显式 的调用父类的构造.
■网友
Java就是这样的,下面解释下为什么。——————————————————————————————————————————1.我们在创建对象的时候要保证对象的各个方面都被被合理的初始化了,构造器只是初始化的一部分,Java的初始化机制是在执行构造器之后初始化的所有工作都完成了。2.至于继承的情况,如果子类没有调用父类的构造器,Java认为这样的初始化是不完整的,所以一定要调用父类的构造器,这样编译才能通过。但是有一点我们需要注意的是,调用父类的构造器的时候还分显式和隐式,所谓隐式,就是指如果父类有默认构造器(这里指无参构造器),那么即使你不显式调用,编译器也会自动给你补上,但是如果父类没有默认的构造器(所有的构造器都是有参的),这时候你就需要显式地在子类的构造器中调用父类的有参构造器,用关键字super调用,并且要写在第一行(不写在第一行就违反了初始化顺序,编译不过)。总之,是由初始化决定的。
■网友
C#的父类定义了有参数的构造函数且没有定义无参数的构造函数的话,子类的构造函数就必须调用父类的某个构造函数。如果父类定义了无参构造函数,那么子类的构造函数都会自动调用它的。所以你可以在父类的无参构造函数中初始化name,并且父类的所有有参构造函数(如果有)都调用无参构造函数就可以了。一般应该这样设计:1,父类的无参构造函数里进行所有“必须的”初始化工作,就是那些任何情况下都应进行的初始化,作为保证类正常工作的基础;2,如果父类有有参构造函数,让它们都调用无参构造函数。这样就防止了子类忘记进行必要的初始化。
推荐阅读
- 知乎有没有必要增加一个特别关注功能
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 趣头条|幻影提车小记…有没有车主群加一个
- 如果把DNS从godaddy转到DNSPOD是不是所有的二级域名都要重新设置,然后等这个各个ISP的缓存重新解析啊
- 基因是主动表达还是受某种场的影响被动表达,又或两者都有有没有隔绝所有电磁场来研究基因表达的实验
- 有没有网站能够搜出我给的类似风格图片的网站
- 有没有突如其来很好的小创意
- 上海或苏州有没有比较好的大数据培训机构
- 在平台购买网店时,签订网店转让合同有没有法律效应
- 钙奶|到底有没有营养?医生:不如白开水孩子爱喝的AD钙奶
