java:为什么子类一定要实现java父类转子类报错的有参构造方法

君,已阅读到文档的结尾了呢~~
java中的继承(子类调用父类构造方法还不懂)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
java中的继承(子类调用父类构造方法还不懂)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口本篇文章总结了一些关于Java构造方法的常见问题。
为什么创建了一个子类对象会调用其父类的构造方法
如下代码示例:
class Super {
public Super() {
System.out.println("Super");
class Sub extends Super {
public Sub() {
System.out.println("Sub");
public class Q4 {
public static void main(String[] args) {
Sub s = new Sub();
结果打印:
当一个类继承了某个类时,在子类的构造方法里,super()必须先被调用;如果你没有写,编译器会自动调用super()方法,即调用了父类的构造方法;
这并不是创建了两个对象,其实只有一个子类Sub对象;之所以需要调用父类的构造方法是因为在父类中,可能存在私有属性需要在其构造方法内初始化;
当编译器自动插入父类构造方法的调用后,子类的构造方法类似如下代码:
public Sub() {
System.out.println("Sub");
一个常见的错误信息:Implicit super constructor is undefined for default constructor
对于Java开发人员来说,这是一个很常见的编译错误:
"Implicit super constructor is undefined for default constructor. Must define an explicit constructor"
之所以出现这个编译错误,是因为父类的默认构造方法未定义。在Java中,如果一个类没有定义构造方法,编译器会默认插入一个无参数的构造方法;但是如果一个构造方法在父类中已定义,在这种情况,编译器是不会自动插入一个默认的无参构造方法,这正是以上demo的情况;
对于子类来说,不管是无参构造方法还是有参构造方法,都会默认调用父类的无参构造方法;当编译器尝试在子类中往这两个构造方法插入super()方法时,因为父类没有一个默认的无参构造方法,所以编译器报错;
要修复这个错误,很简单:
1、在父类手动定义一个无参构造方法:
public Super(){
System.out.println("Super");
2、移除父类中自定义的构造方法
3、在子类中自己写上父类构造方法的调用;如super(value);
在子类中明确调用父类构造方法
以下代码运行正常:
父类定义了一个有参构造方法,然后子类构造方法明确调用了父类有参构造方法;
简单的说,规则是这样的:
在子类构造方法中,不管是程序员手动调用父类构造方法还是编译器自动调用,
子类构造方法必须要调用父类的某个构造方法;
被子类调用的父类构造方法在父类中必须是存在的;
一个有趣的问题
如果一个类定义了一个有参数的构造方法,Java为什么就不提供默认的无参构造方法呢?
有兴趣的可以看下stackoverflow中的回答:
译文链接:
阅读(...) 评论()为什么java的子类中必须调用父类的构造方法。该如何解决 - J2SE当前位置:& &&&为什么java的子类中必须调用父类的构造方法。该如何为什么java的子类中必须调用父类的构造方法。该如何解决&&网友分享于:&&浏览:22次为什么java的子类中必须调用父类的构造方法。为什么java的子类中必须调用父类的构造方法,能给一个逻辑清晰示例否?------解决方案--------------------
子类继承父类的字段和方法。你想那么子类中从父类继承的字段,要谁来初始化呢?父类中有这些字段的初始化方式,所以最好的选择就是用父类的构造方法。设计者,可能是这么考虑的。再告诉你一个事,每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。java创建对象的三个步骤就是,申请内存,调用构造方法,返回对象引用。所以说,为了那个内置的父类对象,也需要进行初始化。
------解决方案--------------------
打个比喻吧。可能不是太恰当。你要造一个儿子出来,但这个儿子不能凭空出现,他需要父亲才能生出来,这个时候就要先创造一个父亲。而构造方法就是造人的,所以先造一个父亲,再才能造一个儿子。所以先调用父类构造方法,再调用子类构造方法。(当然,如果父亲上面还有父类,就继续往上调用)Java code
public A(){
System.out.println(&A&);
Class B extends A{
public B(){
System.out.println(&B&);
Class C extends B{
public C(){
System.out.println(&C&);
public static void main(String[] args) {
C c=new C();
//运行class C 会打印 A B C 。证明依次调用了 A
B C的构造方法
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有java中父类没有构造方法,只有一个不带参数的抽象方法,子类可以要怎么写构造方法不写吗,java的抽象类中父类一定要含无参构造函数吗
来源:网络
关键字: java 不写
更新时间:
延伸:本文除了聚合《java中父类没有构造方法,只有一个不带参数的抽象方法,子类可以要怎么写构造方法不写吗》,免费提供的有关java 不写和java的抽象类中父类一定要含无参构造函数吗的内容之一,已有不少的网友认为此答案对自己有帮助!获取更多与《》相关的知识。
网友0的回答
不一定,但是一定要有一个构造函数,有参无参都可以。构造函数是对象的基本,没有构造函数就没有对象。若果网友1的回答
不行的你想一下,子类继承了父类的各种属性,而构造方法则相当于把父类给实例化出来,如果你子类实例化的时网友2的回答
}注意:抽象类被继承,子类必须复写其中的所有抽象方法。 评论(2) | 3 0 2010-04网友1的回答
概述:子类默认会调用父类的隐士的构造方法,如代码:publicclassPerson{}public网友0的回答
父类的构造方法不用继承,可以 用super来调用,如父类的构造方法为 :public A(){};那网友1的回答
抽象类可以有构造函数,但是不能实例化。 子类实例化必须要调用父类构造函数(默认调用父类的无参构造函数网友2的回答
两个问题,一一作答。 1 ,在JAVA的抽象类中,可以写带参数的构造方法。 2,如果这个抽象类被继承网友1的回答
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super(参网友0的回答
没有修饰符,默认就是protected的,这种变量是能被子类访问的。网友1的回答
最满意的回答
猜你感兴趣
回答问题赢iPhone 6java 中子类的构造方法一定要调用父类的构造方法吗?
java 中子类的构造方法一定要调用父类的构造方法吗?
09-08-06 &
不是一定要调用,你只要在Light类中加入一个无参数的构造函数:public Light(){}事情就解决了。因为你在Light类里自己创建了有参构造函数,那么系统不会再自动生成无参的构造函数。子类会无条件继承父类无参构造函数,而你父类里没有无参构造函数,子类继承时会报错,这个一定要注意。
请登录后再发表评论!
不是一定要调用,你只要在Light类中加入一个无参数的构造函数:public Light(){}事情就解决了。因为你在Light类里自己创建了有参构造函数,那么系统不会再自动生成无参的构造函数。子类会无条件继承父类无参构造函数,而你父类里没有无参构造函数,子类继承时会报错,这个一定要注意。
请登录后再发表评论!

我要回帖

更多关于 java父类获取子类属性 的文章

 

随机推荐