JAVA中子类会不会继承父类的构造方法
声明:刚刚接触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中子类会不会继承父类的构造方法的更多相关文章
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- 关于JAVA中子类和父类的构造方法
本篇文章总结了一些关于Java构造方法的常见问题. 为什么创建了一个子类对象会调用其父类的构造方法 如下代码示例: package simplejava; class Super { String s ...
- java中子类与基类变量间的赋值
Java中子类与基类变量间的赋值 子类对象可以直接赋给基类变量. 基类对象要赋给子类对象变量,必须执行类型转换, 其语法是: 子类对象变量=(子类名)基类对象名; 也不能乱转换.如果类型转换失败Jav ...
- Java中子类对象初始化的过程
Java中的继承机制看似简单,实际上包含了很多细节.最近在刷题过程中屡屡跳坑,于是自己仔细再学习了一下Java中子类初始化的细节,与大家分享. class Father { Father(){}; } ...
- 第32节:Java中-构造函数,静态方法,继承,封装,多态,包
构造函数实例 class Cat{ // 设置私有的属性 name private String name; // 设置name的方法 public void setName(String Name) ...
- 谈谈java中成员变量与成员方法继承的问题
谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类:
- Java中的集合类型的继承关系图
Java中的集合类型的继承关系图
随机推荐
- 201521123014 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 有关继承的知识点 1.2 使用常规方法总结其他上课内容 多态性 相同的形态,不同的行为 例子: public class Manager extends Employee{ ...
- eclipse : java项目中的web.xml( Deployment Descriptor 部署描述文件 )配置说明
context-param.listener.filter.servlet 首先可以肯定的是,加载顺序与它们在 web.xml 配置文件中的先后顺序无关.即不会因为 filter 写在 listen ...
- Tomcat【介绍Tomcat、结构目录、虚拟目录、临时域名、虚拟主机、体系结构】
什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 为什么我们需要用到Tomcat 如果你学过html,c ...
- Struts2第五篇【类型转换器、全局、局部类型转换器】
前言 上篇博文已经讲解了,Struts2为我们实现了数据自动封装-由上篇的例子我们可以看出,表单提交过去的数据全都是String类型的,但是经过Struts自动封装,就改成是JavaBean对应成员变 ...
- 嵌入系统squashfs挂载常见问题总结
由于squahsfs的一些优点,嵌入系统常常直接使用squashfs作为initrd挂载到/dev/ram,作为rootfs.这里对常见的一些问题进行一些分析. 1. kernel启动出现错误 RAM ...
- XML功能
REF:https://www.baidu.com/link?url=_-UY8rZVAORlesKTth0F7C8LbvXCL4lSwz6vmQVnTEgmT06NFGdoaD9FbuEQhR7xG ...
- CKEditor与dotnetcore实现图片上传
CKEditor的使用 1.引入js库 <script src="https://cdn.ckeditor.com/4.6.1/standard-all/ckeditor.js&quo ...
- GCD之线程挂起与恢复
我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue.调用dispatch_suspen ...
- 回文词_KEY
回文词 (palin.pas/c/cpp) [问题描述] 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得的结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个 ...
- 理解ES6——Promise
浏览器的控制台真是个好东西,啥都能干: 这就是Promise,能看出来啥? 1.是个构造函数,可以new实例. 2.自身有一些方法:all.race.reject.resolve... 3.原型上有c ...