子类为什么不能调用父类构造方法?

来源:互联网  责任编辑:小易  时间:2017/1/10 12:44:11
用户提出问题:子类为什么不能调用父类构造方法?,具体如下:

通过互联网整理获得以下解决方法:

=================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();
}
}

如果您还有更好的解决方法,请在最下面评论中留下您的解决方法


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