声明:刚刚接触java不久,如果理解有错误或偏差望各位大佬强势批判

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

父类代码:

 class Father {
String name ; //就不set/get了
//Father类无参构造方法
public Father(){
System.out.println("这是Father类的无参构造方法");
}
//Father类有参构造方法
public Father(String name) {
this.name = name;
System.out.println("这是Father类的有参构造方法:"+this.name);
} }

子类代码:

 class Sun extends Father {
//这里java会为你提供一个默认的构造方法,但是代码上是不会显示出来的
//public Sun(){}
}

所以运行测试类,创建父类对象,调用无参构造方法初始化

结果:

 public class FatherTest01 {
public static void main(String[] args) {
Father ff = new Father(); //Sun ss = new Sun();
}
}

有以下结果:【输出结果都用红色字体表示】

这是Father类的无参构造方法

所以运行测试类,创建父类对象,调用有参构造方法初始化

Father ff = new Father("小明");

  

有以下结果:【输出结果都用红色字体表示】 

这是Father类的有参构造方法:小明

然后我们再创建子类:Sun类对象,调用无参构造方法初始化

Sun ss = new Sun();

有以下结果:【输出结果都用红色字体表示】 

这是Father类的无参构造方法

  可以见得子类对象默认调用了父类的无参构造方法,因为这时Sun类中没有构造方法,所以java会默认提供无参构造方法,

public Sun(){

//这个构造方法中又会默认调用父类的无参构造方法,即public Father(){

System.out.println("这是Father类的无参构造方法");},因此会有以上结果

}

所以以上结果跟我们显示创建Sun类无参构造方法的结果一样,即:

public Sun(){

}

再次验证:

将Sun类中的无参构造方法写成这样:

class Sun extends Father {
//String name = "sun";
public Sun(){
System.out.println("这是sun类的无参构造方法");
}
}

结果:【这里会先调用父类的构造方法,因此结果会先出现父类无参构造方法中的语句,即隐式语句:super();】

这是Father类的无参构造方法
这是sun类的无参构造方法

因此,构造方法是一个类独有的方法,不会被其他类继承,但是在子类实例化对象时候,如果子类的构造器没有显式的调用父类构造器,则自动调用父类的默认无参构造器,相当于默认省略了super();

假设父类只有有参构造方法,没有无参构造方法会怎么样呢?

class Father {
String name ; //就不set/get了
//Father类无参构造方法
/*public Father(){
System.out.println("这是Father类的无参构造方法");
}*/
//Father类有参构造方法
public Father(String name) {
this.name = name;
System.out.println("这是Father类的有参构造方法:"+this.name);
} }

 此时运行成语,编译器就会报错:The constructor Father() is undefined

总结:

  子类实例化对象时,会先调用父类的构造方法,如果子类的构造方法没有显式的调用父类的构造方法,默认调用super();
子类要使用父类有参的构造方法,使用super(参数)形式,且super()必须是子类构造方法中的第一行语句。
如果父类没有不带参数的构造方法,且子类的构造方法中有没有显式的调用父类其他构造方法,则java编译器会报错

另外:方法是没有继承一说的,只有覆写或者重载,类和类之间才能叫继承。

备注:构造器==构造方法

JAVA中子类会不会继承父类的构造方法的更多相关文章

  1. 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...

  2. Java中子类是否可以继承父类的static变量和方法而呈现多态特性

    静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...

  3. java中子类继承父类程序执行顺序

    java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...

  4. 关于JAVA中子类和父类的构造方法

    本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...

  5. java中子类与基类变量间的赋值

    Java中子类与基类变量间的赋值 子类对象可以直接赋给基类变量. 基类对象要赋给子类对象变量,必须执行类型转换, 其语法是: 子类对象变量=(子类名)基类对象名; 也不能乱转换.如果类型转换失败Jav ...

  6. Java中子类对象初始化的过程

    Java中的继承机制看似简单,实际上包含了很多细节.最近在刷题过程中屡屡跳坑,于是自己仔细再学习了一下Java中子类初始化的细节,与大家分享. class Father { Father(){}; } ...

  7. 第32节:Java中-构造函数,静态方法,继承,封装,多态,包

    构造函数实例 class Cat{ // 设置私有的属性 name private String name; // 设置name的方法 public void setName(String Name) ...

  8. 谈谈java中成员变量与成员方法继承的问题

    谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:

  9. Java中的集合类型的继承关系图

    Java中的集合类型的继承关系图

随机推荐

  1. 集美大学网络1413第十三次作业成绩(团队八) -- 第二次项目冲刺(Beta阶段)

    题目: 团队作业8--第二次项目冲刺(Beta阶段) 团队作业8-成绩:  团队/分值 新加入成员 角色 技术特点 改善的功能. 原因. bug 新增功能. 方法. 如何实现 团队分工改进. 原因 改 ...

  2. 团队作业10——beta阶段项目复审

    小组的名字和链接 优点 缺点(bug报告) 最终名次 拖鞋大队 基本功能都实现了,符合用户的需求:每次都能按时完成博客,满足题目要求,所以作业完成的也比较优秀.较alpha版本新增了查重自定义的功能, ...

  3. 结对作业--基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...

  4. 201521123011《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源代码 1.1 com.p ...

  5. 201521123012 《Java程序设计》第一周学习总结

    一.本章学习内容 1.了解了JDK.JRE .JVM. 2.大概看过了Java的诞生.版本演进(JDK1.1.4,JDK1.1.5--JDK1.1.8,J2SE1.2--Java SE 8)以及三大平 ...

  6. Java-高效地使用Exception-实践

    注:本文翻译自Exceptional practices,共分为3节.该文章从实践的角度非常透彻地解释了为什么要处理异常,以及如何处理异常.这些都是那些只会介绍trycatchfinally语法的教材 ...

  7. java课设-计算数学表达式的程序,201521123050,肖世松,个人

    1.团队课程设计博客链接 http://www.cnblogs.com/xss666/p/7063780.html 2.个人负责模块或任务说明 个人负责:计算器外观,左容器CalPanelL p1: ...

  8. MD格式示例

    一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...

  9. MySql数据库第一天

    LAMP  linux apache mysql php的关系服务器软件 “服务器” 数据库 操作 mysql常用数据类型:int varchar float double bit datetime. ...

  10. Javascript跳转页面和打开新窗口等方法

    1.在原来的窗体中直接跳转用onClick="window.location.href='你所要跳转的页面';" 2.在新窗体中打开页面用:onclick="window ...