数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

子类为什么不能调用父类构造方法?-CSDN论坛

来源:互联网  责任编辑:小易  时间:2018/1/19 19:36:19
本网有用户碰到这样的问题:子类为什么不能调用父类构造方法?-CSDN论坛,具体问题如下:

本网根据需求用户需求,为用户寻得以下其他网友提供的解决方法,方法仅供参考,具体如下:

解决方案1:

肯定能啊。。。。

解决方案2:

可以super(参数)

解决方案3:

肯定可以啊,不过要在子类构造方法中调用。实际上子类构造方法都会调用父类的构造方法,只不过有的是隐式调用,有的是显式调用。

解决方案4:

new的时候先判断父类的构造方法,如果子类有重写,子类采用自己的构造方法

解决方案5:

子类可以调用父类,子类中只能实现与父类相同的部分。。。

解决方案6:

不是能不能的问题,是一定会调用。至于调用哪个构造方法,是根据子类构造方法的参数来决定的,通过super指定调用父类的哪个构造方法,如果没有指定,实例化对象的时候,会自动调用父类无参的构造方法。所以,在定义一个类时,如果没有特殊需求,尽量在类中定义要给无参的构造方法,避免继承时出现错误。

解决方案7:

如果父类中构造被重写,这个不叫不调用,叫做调用后——被重写,体现为子类的构造。
如果没有被重写,就会直接调用父类的构造方法,默认super的

解决方案8:

不但能调用,而且必须调用,而且必须是子类构造器中的第一行语言
如果子类构造器没有显式调用,则编译器帮你调用

不信的话,做个测试:
定义一个父类,这个类有带参数的构造器
为这个父类定义一个子类,在子类构造器中不显式调用父类构造器

你看能不能编译通过


实现上:子类构造器必须调用父类构造器,并且是子类构造器中的第一条语言
而这个规则在C#里有更好的语法保证,C#里调用父类构造器的写法是:
public SubClass() : base(argument list) {
......
}

解决方案9:

当然能了,最近总是看到这么多问基础问题的,你们自己试一下不就行了

解决方案10:

可以的啊  子类构造方法中第一行默认有一条super( )语句  默认调用的是父类中无参的构造方法  如果父类中是有参的构造方法  那super( )括号里就应该要有对应的参数

解决方案11:

肯定可以啊,而却必须得调用啊

解决方案12:

你将以下代码运行看一下,可以发现在子类中会隐式的调用父类的无参构造器

class A{
public A(){
System.out.println("A构造")
}


class B extends A{
public B(){
//super();//这里会有一个隐式的调用
System.out.println("B构造")
}
}

class Ma{
public static void main(String[] args){
B b =new B();
}
}

解决方案13:

利用java的反射机制可以调用

解决方案14:

引用 12 楼 Our_existence 的回复:
你将以下代码运行看一下,可以发现在子类中会隐式的调用父类的无参构造器

class A{
public A(){
System.out.println("A构造")
}
public A(String string){
System.out.println("A显式构造"+string)
}


class B extends A{
public B(){
//super();//这里会有一个隐式的调用
//super("xianshi");//这里可以有一个显式调用
System.out.println("B构造")
}
}

class Ma{
public static void main(String[] args){
B b =new B();
}
}

补充12

解决方案15:

子类还能写自己的方法

解决方案16:

就问楼主一句话,Super关键字是干嘛用的

解决方案17:

引用 7 楼 dacongzhuangdiqiu 的回复:
如果父类中构造被重写,这个不叫不调用,叫做调用后——被重写,体现为子类的构造。
如果没有被重写,就会直接调用父类的构造方法,默认super的

构造不能重写。

解决方案18:

可以调用啊,你可以在子类构造方法中加super(xxxx),里面传参数,就可以调用父类的有参构造,不传就调用无参构造函数。没有super()就默认调用父类无参构造函数

解决方案19:

学习了!!!!

解决方案20:

基类的构造器一定会在子类的构造成过程中调用的,而且是按照继承层次逐渐向上连接,使得每个基类的构造器都能调用。
为什么呢?
这是因为子类不能访问private对象,如果不调用基类的构造方法的话,就没有创建基类,那么基类中的private对象就没有创建,这显然是是不行的。只有基类的构造器才能够完整创造对象

解决方案21:

子类的构造函数里使用super关键字,可以调用父类构造函数,不过貌似只能写在最前面,否则报错

解决方案22:

加载子类肯定要加载其父类,当然要加载父类的构造方法了。

解决方案23:


public class Test { //测试类
public static void main(String[] args) {
             Son son=new Son();     //子类的构造方法会默认继承父类的构造方法
}
}

class Father {       //父类
public Father() {
System.out.println("我就是父类方法!");
}
}

class Son extends Father {          //子类继承父类
public Son() {
//super();其实系统会在子类构造方法默认调用父类的构造方法
System.out.println("我是子类方法!");
}

public void diaoYongFuMehtod(){
super();      //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
/**
 * 解释原因:
 *     假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
 *     Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
 *     Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
 *     其实java语言很多都是符合伦理道德的)
 * */
}
}

解决方案24:

你用我的代码跑一下就知道了,希望对你有用,好好加油!

public class Test { //测试类
public static void main(String[] args) {
             Son son=new Son();     //子类的构造方法会默认继承父类的构造方法
}
}

class Father {       //父类
public Father() {
System.out.println("我就是父类方法!");
}
}

class Son extends Father {          //子类继承父类
public Son() {
//super();其实系统会在子类构造方法默认调用父类的构造方法
System.out.println("我是子类方法!");
}

public void diaoYongFuMehtod(){
super();      //报错,这里不能调用父类构造方法,父类构造方法只能被子类构造方法调用,不能被子类的普通方法调用
/**
 * 解释原因:
 *     假设这个父类构造方法是可以在子类普通方法中被调用的,也就是new Son().diaoYongFuMehtod();这里的意思就是先加载Son类创建好
 *     Son类对象然后调用diaoYongFuMehtod方法,然后diaoYongFuMehtod方法里的super()是加载Father类,总体类加载顺序就是
 *     Son类-->Father类.而其实虚拟机真正的加载方式是先加载Father类,再加载子类的.(用现实生活举例:没有父亲这个人出现哪会有儿子呢,
 *     其实java语言很多都是符合伦理道德的)
 * */
}
}

解决方案25:

引用
由于子类的构造器不能访问超类的私有域,所以必须利用超类的构造器对这部分私有域进行初始化,我们可以通过super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一条语句。
                                                                                                                                                                              ----摘自<Java核心技术>

  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved