会自动调用父类构造函数的构造函数,那请问:会实

对于子类序列化接口,父类没有实现序列化接口构造函数不会被调用有什么用?
有什么用?对于子类序列化接口,父类没有实现序列化接口构造函数不会被调用有什么用?
写下你的评论...
写下你的评论...
我知道,这是老师说的。但是我想知道在实际开发中,应用在哪些方面
写下你的评论...
写下你的评论...
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-2java中,子类初始化时一定要调用父类的构造方法,不调用行吗?_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
java中,子类初始化时一定要调用父类的构造方法,不调用行吗?
java中,子类初始化时一定要调用父类的构造方法,不调用行吗?谢谢!!
你想一下,子类继承了父类的各种属性,而构造方法则相当于把父类给实例化出来,如果你子类实例化的时候不调用父类的构造方法,相当于子类压根就没有父亲,又怎么谈得上继承呢?
另外,抽象类是例外,因为抽象类是没有构造方法的,无法实例化
采纳率:80%
因为子类继承了父类,那么你通过子类调用父类方法或变量的时候会出现什么情况呢,那么就默认的含有父类的公共成员方法和公共成员变量,这些方法和变量在子类里不再重复声明。如果你初始化子类的时候,不初始化父类?当然就是抛异常阿!所以,Java虚拟机会在你初始化子类的时候默认的初始化子类的父类一定会调用,原因是这样的
本回答被提问者采纳
如果父类的构造方法是带参数的,而且没有无参数的构造方法,那么在子类的构造方法中必须显式地调用父类的构造方法。如果父类的构造方法是无参数的,那么在子类中写不写都可以,不写的话会隐式地调用。
请去读教程和做实验
JAVA默认是会调用父类的构造方法的事实在子类的第一句编译器,会自动的加一个super来调用父类的构造方法~~
随便你怎么样,它都会调用.因为在继承之后的构造方法里面,默认的会调用,你如果不写,只是你看不到而已
其他3条回答
为您推荐:
其他类似问题
构造方法的相关知识
等待您来回答君,已阅读到文档的结尾了呢~~
chp7 面向对象三大特性
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
chp7 面向对象三大特性
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于Java构造函数(Constructor)的常见问题总结 - 简书
关于Java构造函数(Constructor)的常见问题总结
这篇文章总结了Java使用构造函数中最常遇到的五个问题!
1 为什么调用子类的构造方法的时候,默认会调用父类的构造方法
看下面这个简单的例子:
public class Sub extends Super {
public Sub() {
System.out.println("Sub");
public static void main(String[] args) {
Sub sub = new Sub();
class Super {
public Super() {
System.out.println("Super");
Paste_Image.png
当继承自一个类的时候,构造方法就会首先调用super()方法。如果没有显式的写这个语句,那么编译器就会自动插入这个语句。这就是为什么我们上面的那个例子程序会先调用super的构造方法。但要切记, 虽然调用了父类的构造方法,但只创建了一个对象也就是子对象。之所以要调用父类的构造方法,是因为super类可能需要构造函数来初始化一些私有的成员变量。编译器自动插入super构造方法后,子类的构造函数就会像下面这样:
public Sub(){
System.out.println("Sub");
2 常见错误:Implicit super constructor is undefined for default constructor. Must define an explicit constructor
Implicit super constructor is undefined for default constructor. Must define an explicit constructor
这个错误是很多开发者经常遇到的错误,错误原因就是找不到超类中的默认构造函数。
看下面的代码:
public class Sub extends Super {
public Sub(String s) {
public static void main(String[] args) {
Sub sub = new Sub();
class Super {
public Super(String s) {
上面这段代码会报错:Implicit super constructor Super() is undefined. Must explicitly invoke another constructor。
编译器错误是因为默认的super()无参的构造函数是没有定义的。在Java中,如果一个类没有定义构造函数,编译器会自动插入一个默认的无参的构造函数。但是,如果类中定义了一个构造函数,编译器就不会自动插入无参的构造函数了,所以如果我们不显示定义一个无参的构造函数,那么这个构造函数就不存在。
上一小节,我们知道,如果子类的构造函数中,没有显示的调用父类的构造函数,那么,编译器就会插入super(),也就是自动调用无参的构造函数。但是此时,父类没有无参的构造函数,所以就会报错了。
解决这个问题很简单,我们可以给父类插入一个无参的构造函数,或者在子类构造函数中显示的调用的父类有参构造函数。
在子类的构造函数中显示的调用父类的构造函数
下面的代码是正确的。
Paste_Image.png
构造函数的使用规则
简单的说,在使用的时候,子类的构造函数必须调用父类的构造函数,不管有没有显示的声明。所以,被调用的父类构造函数,一定在定义好!
为什么Java在一个类已经实现了一个带参的构造函数的时候,不实现默认的无参构造函数?
这是个很有趣的问题。我们知道如果在一个类中没有声明一个构造函数,那么编译器会隐式的帮我们实现一个无参的构造函数,但如果我们一旦一个构造函数,不管带不带参数,那么编译器都不会提供默认的构造函数,所以这么做的原因是为什么呢?
有一个原因就是,如果我们给所有的类都自动实现一个无参的构造函数,就可能出现问题,会打破类的设计原则。比如说,考虑这个Scanner类,他有几个构造函数,你可以通过这几个构造函数,声明你想要读取数据的来源,如果编译器增加了无参的构造函数,那么你不给定读取的数据源,就会报错,程序无法执行,因为我们不能不指定一个数据源就让他去读取数据。本文转载自:http://blog.csdn.net/fpf_721521/article/details/5518753
1、子类在创建实例后,类初始化方法会调用父类的初始化方法(除了.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方我说的是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即& &init&&方法(红色部分为方法名),初始化方法是由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;private Date date=new Date();等等,第二个部分是由初始化块组成,例如:
& &public class Test{ private int i=0;//初始化第一部分 //以下大括号内为初始化第二部分 { this.i=4; //do something...... } }
第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中(这里说的复制其实应该说是编译,不过为了让你更好理解所以如此说).
那么说初始化方法如何追述其父类的,这也关系到初始化方法的结构,初始化方法的执行顺序以及结构就如上所说,但是每个初始化方法的第一个执行指令就是调用另外一个初始化方法,这个初始化方法可能是自身类某个初始化方法,例如你的构造函数中第一句有类似this(...)这种语句,那么初始化方法就会调用自身类的指定构造方法;如果你的构造方法中没有指定构造方法调用,那么初始化方法会默认调用父类无参数初始化方法,如果你的子类第一句为 super(....),那么初始化方法会调用父类指定初始化方法。这种调用过程会递归进行调用,直到这个类是java.lang.Object类。
调用初始化方法并不代表会生成对象,你的java代码中出现new关键字加上构造方法的调用,只会生成一个对象,其父类对象不会生成,所以调用父类为抽象类的构造方法完全是合理的。而且初始化方法对于虚拟机来说只是一个名称叫做& &init&&的普通方法,区别只是生成对象以后调用而已(sun 的jdk私有包中有绕过构造方法生成对象的方式,可以证明之上说法,具体如何我这里不陈述)。
然后回答你的第二个问题,抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象时抽象类中按需求初始化抽象类中的字段以及执行一些初始化代码。其实并不是一定要生成某个类的实例才调用构造方法,子类也需要调用父类构造方法。而生成实例也并不一定会调用构造方法,在某些特殊实现中或者特殊情况下,生成实例不会调用构造方法。而调用了构造方法也不一定就生成了一个实例,但是那一定是一个实例调用的,就像一个普通的实例方法一样。
本文已收录于以下专栏:
相关文章推荐
这篇文章总结了关于Java构造的常见问题。
1)为什么创建一个子类对象要也需要调用父类的构造函数?
class Super {
public Super()...
通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程度上可以说它类似于C语言中的全局函数和全局变量。但是,并不是说有了这种便利,你便可以随处使用,如果那样的话,你便需要认真考虑一下自...
出处:http://blog.csdn.net/liu/article/details/
问题:创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类...
我们分别为父类和子类添加显式的构造函数,代码如下
1.如果父类中没有构造函数,即使用默认的构造函数,那子类的构造函数会自动调用父类的构造函数
class Father
private int a,b;
void show()
构造函数的调用顺序:基类 --> 数据成员类对象(基于声明的顺序) --> 子类;
析构函数的调用顺序则相反。
构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需...
测试代码:
抽象父类:
面向对象的三大特性:封装、继承、多态
什么水是类?什么是对象,类和对象的区别
类是模具,创建对象的模具,抽象的
类是一种数据类型,用户自定义的数据类型
类组成:字段,属性,方法,构造函数等
他的最新文章
讲师:李江龙
讲师:司徒正美
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 调用父类构造函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信