java中子类继承父类的构造方法吗?

Mr_Curiosity_ 2012-10-28 07:50:38
看java2实用教程上写的 子类不能继承父类的构造方法
百度了一下,有人说能继承,也有人说不继承
自己写了一段试了一下

class A {
A() {
System.out.println("调用了");
}
}

class B extends A {
B(){
System.out.println("no");
}
}

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

run:
调用了
no
这算调用了吗,到底怎么回事?能不能具体讲讲,谢谢了
...全文
10751 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我也是新手,这个问题总结了一下:先看有没有重写,重写了就调用子类自己的构造。如果没有重写:那super()就分带参数和不带参数。若不带:那就不管有没有写super()都等于写了super(),而写了super()就要访问父类的默认构造器,有就ok,没有就报错。若果带参数,就去访问带对应个数参数的构造
zhangzhenyuzy 2014-08-04
  • 打赏
  • 举报
回复
子类一定会调用父类的无参构造方法. 子类自己的构造方法也会调用.
Freeman奔跑吧 2013-11-27
  • 打赏
  • 举报
回复
引用 12 楼 MrMiRuiKe 的回复:
看到楼上的说明点不到关键上面我很有压力啊 LZ 你之所以觉得子类继承了父类的构造方法是因为子类里面有隐藏的super(),这是系统可以省略但存在的,是因为它调用了父类的构造方法,所以main 才显示了父类的构造方法。 如果父类没有无参数构造方法,再写super() 肯定出错啊,要写 super(参数),要明确些出来。懂了么
厉害,受用
a412588063 2013-10-08
  • 打赏
  • 举报
回复
java继承构造方法调用,创建子类实例的时候,如果没有super调用父类带参数的构造方法,则默认会调用父类的无参构造方法,相当于调用super(),其实这句就相当于“隐藏”调用语句;
Mr米瑞克 2013-10-05
  • 打赏
  • 举报
回复
看到楼上的说明点不到关键上面我很有压力啊 LZ 你之所以觉得子类继承了父类的构造方法是因为子类里面有隐藏的super(),这是系统可以省略但存在的,是因为它调用了父类的构造方法,所以main 才显示了父类的构造方法。 如果父类没有无参数构造方法,再写super() 肯定出错啊,要写 super(参数),要明确些出来。懂了么
陈靓仔 2013-08-20
  • 打赏
  • 举报
回复
答案是:调用了 调用方式:如果子类没有覆盖父类的构造方法则默认调用父类的默认构造方法(即父类无参数的构造方法),也就是说如果父类的构造方法有参数则会出错。 你可以试下这样:(错误的代码) class A{ A(String a){ System.out.println(a); } private String a="调用了"; } class B extends A{ B(){ System.out.prntln("no"); } } 你必须这样: class A{ A(String a){ System.out.println(a); } private String a="调用了"; } class B extends A{ B(String a){ super(a); System.out.prntln("no"); } private Stirng a="调用了"; }
杜仲的薄荷 2013-05-31
  • 打赏
  • 举报
回复
学习了,很受用。。。。
ewth126 2012-10-28
  • 打赏
  • 举报
回复
神马啊!首先,楼主的理解是有问题的。
这里说的不能继承 是说,构造方法不能在子类中被覆写。

这里说的继承了父类的构造方法是说子类的构造方法调用父类的构造方法。
书断华 2012-10-28
  • 打赏
  • 举报
回复
继承就跟我们现实中的父子关系差不多,要有一个孩子对象那么就得先有一个父亲(会调用父类的构造方法),所以会执行父类构造方法。另一种如果你想调用父类的带参数构造方法,那还得通过super关键字来调用(6楼说的方法)。构造方法是不能继承的,想想如果能继承 那不是孩子也能构造父亲了。(自己理解不对不要批指出就好谢谢)
luxiangzhou 2012-10-28
  • 打赏
  • 举报
回复
子类不会继承父类的构造方法,但是子类在实例化对象时:如果子类的构造器没有显示的调用超类的方法,则将自动调用超类默认构造器。如果超类没有不带参数的构造器,且子类的构造器中又没显示的调用超类其他构造器,则Java编译器将报告错误(java核心技术P146)。
蝴蝶又来了 2012-10-28
  • 打赏
  • 举报
回复
书上说:子类不能继承父类的构造方法,因此,子类如果想使用父类的构造方法,必须在子类的构造方法中使用,并且使用关键字super表示,而且super必须是子类构造方法中的头一条语句
依琳小师妹 2012-10-28
  • 打赏
  • 举报
回复
首先,方法是没有继承一说的,只有覆写或者重载,类和类之间才能叫继承。
其次,你所出现的效果,是类的一个初始化的顺序问题,子类在初始化的时候会先调用父类的构造方法,所以打出了你的那句话。
最后,子类可以使用super()显示调用父构造器,没有重写的必要。
LogicTeamLeader 2012-10-28
  • 打赏
  • 举报
回复
就是这样。
[Quote=引用 3 楼 的回复:]

继承问题,子类实例化生成对象时,把这个类加载到JVM上,会先生成类的实例,但是new关键字有一个特殊的性质就是会先调用类的无参构造方法,如果这个类继承了父类,则子类实例化时,会先调用父类的无参构造方法,因此在这儿B b = new B()的过程中,会先调用A类的无参构造方法
[/Quote]
zhaoming262350 2012-10-28
  • 打赏
  • 举报
回复
继承问题,子类实例化生成对象时,把这个类加载到JVM上,会先生成类的实例,但是new关键字有一个特殊的性质就是会先调用类的无参构造方法,如果这个类继承了父类,则子类实例化时,会先调用父类的无参构造方法,因此在这儿B b = new B()的过程中,会先调用A类的无参构造方法
aimsgmiss 2012-10-28
  • 打赏
  • 举报
回复
不会继承父类的构造方法;但是能够用super()调用
falcon_s 2012-10-28
  • 打赏
  • 举报
回复
这就是调用了啊

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧