子类调用父类构造器《转载》
有时我们在写子类的时候会出现如下所示的报错:
Implicit super constructor AbstractClass() is undefined for default constructor. Must define an explicit constructor
在子类继承父类的时候,实例化时java编译器是会首先调用父类的构造函数,然后调用子类的构造函数的,这也就意味着,如果
父类没有默认构造函数的话,在子类的构造函数中第一行必须显式调用父类的构造函数,否则的会是报编译错误的。
java继承中对构造函数是不继承的,只是调用(隐式或显式)。
以下是例子:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
SonClass s = new SonClass(66);
}
}
编译后执行结果如下是什么呢?
分析:SonClass s = new SonClass(66);执行这句时,调用
public SonClass(int c) {
System.out.println(1234);//系统会自动先调用父类的无参构造函数(super())
}
在这个构造函数中,等价于
public SonClass(int c) {
super();//必须是第1行,否则不能编译
System.out.println(1234);
}
所以结果是 100
1234
在创建子类的对象时,Java虚拟机首先执行父类的构造方法,然后再执行子类的构造方法。在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,这可以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化。
3.如果子类构造函数是这样写的
public SonClass(int c) {
super(22);//必须是第1行,否则不能编译
//显式调用了super后,系统就不再调用无参的super()了;
System.out.println(1234);
}
执行结果是 22
1234
总结1:构造函数不能继承,只是调用而已。
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显式调用父类有参构造函数
如下:
SonClass (){
super(777);//显示调用父类有参构造函数
System.out.println(66);
}
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结2:创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。
子类调用父类构造器《转载》相关推荐
- 子类调用父类构造器的几种情况
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参 ...
- JavaScript中子类调用父类方法的实现
一.前言 最近在项目中,前端框架使用JavaScript面向对象编程,遇到了诸多问题,其中最典型的问题就是子类调用父类(super class)同名方法,也就是如C#中子类中调用父类函数base.** ...
- JAVA子类调用父类构造方法
子类调用父类的构造方法 父类的构造方法不能被子类继承.以下语句中MyException类继承了java.lang.Exception类. public class MyException extend ...
- Python_子类调用父类的方法
1.方式一 子类调用父类的方法,包含2中形式的调用.一种形式是在类内部通过继承的方式调用父类的方法,另外一种形式是子类实例化后之后通过继承的方式来调用父类的方法.如下图所示: 注意一点,在子类内部通过 ...
- C++——子类调用父类方法
C++--子类调用父类方法 原创声明:本文系博主原创文章,转载或引用请注明出处. 1. 如果类B是类A的子类,则在类B的成员方法中调用类A的方法时,可以直接以 A::method(paramlist) ...
- 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )
文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...
- Scala调用Java静态成员及静态方法注意点——只能通过当前类名调用而不能借助子类调用父类静态成员/方法
只能通过当前类名NioUtil调用静态成员 package com.zxl.scalaimport cn.hutool.core.io.{FileUtil, IoUtil, NioUtil} impo ...
- python子类初始化父类_Python实现子类调用父类的初始化实例
前言 python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错. 例如以下的代 ...
- python子类继承父类属性实例_Python实现子类调用父类的初始化实例
前言 python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在子类中这些属性未经过初始化,使用时就会出错. 例如以下的代 ...
最新文章
- IEEE年终AI大盘点:网友教会GPT-3骂人、DeepMind再造机器人
- 烂泥:下载酷我收费的MV
- PG通用(常用)功能
- 用数据可视化解读:为何2亿国人爱钓鱼
- jvm-垃圾回收随时都可以STW吗?带你认识安全点和安全区域
- 本地代码推送到github仓库
- Linux 之四 Ubuntu 20.04 WiFi 无法使用、设置无法显示、远程桌面、SSH、Git、PPA、FFmpeg 等各问题记录
- 11. Container With Most Water
- IOS开发之MD5加密和钥匙串的使用-oc
- centos 多个mysql,Centos中安装多个MySQL数据的配置实例
- linux7 共享盘创建,使用CentOS7建立samba文件共享服务器
- FirstStep(洛谷P3654题题解,Java语言描述)
- 《深入理解 Spring Cloud 与微服务构建》第十一章 服务网关
- Javascript in one picture
- VS2019C++编译GDAL3.3.2+SQLite3+PROJ6+GEOS3.7.3+HDF4+HDF5(保姆级教程)
- 我的阿里面试经验分享给大家
- 微博、QQ、微信第三方登录 Java 实现实录
- Mac VMWare键盘鼠标失灵
- 【综合类型第 8 篇】陆游和唐婉的故事
- FH162儿童电子液晶手写板方案芯片开发
热门文章
- vi/vim滚动屏幕
- 快手怎么引流做CPA?如何在快手直播上截流操作CPA项目
- p二、使用 docker-compose 安装 Prometheus+Alertmanager+Grafana
- 封头名义厚度如何圆整_关于几种形式封头特点的比较
- css3半圆弧线,css3实现画半圆弧线的示例代码
- 【U8】U8.11(8.12) access版本如何升级到用友T3及U8
- Python编程题:用户登录,三次机会后锁定
- 电机学习笔记 无刷电机控制6步换相
- Windows 11 笔记本电脑打开盖子无法立刻唤醒
- 第一次做项目经理总结_如何做最好的项目经理(项目经理管理项目攻略)!(赠书籍)...