构造器里面的super()有什么用?到底写不写?

简介: 平时写的单独一个类如果没有直接继承父类就是直接继承的Object,有父类就是间接继承的Object,因为父类会继承Object,java的所有类都是Object的子类,哪怕不写super(),也会默认调用的父类的空构造器。

平时写的单独一个类如果没有直接继承父类就是直接继承的Object,有父类就是间接继承的Object,因为父类会继承Object,java的所有类都是Object的子类,哪怕不写super(),也会默认调用的父类的空构造器。


接下来举个例子


classA{
publicA() {
System.out.println("A的无参数构造器");
    }
publicA(intnum) {
System.out.println("A的有参数构造器,参数为:"+num);
    }
}
classBextendsA{
publicB() {
System.out.println("B的构造器");
    }
}
publicclasstest {
publicstaticvoidmain(String[] args) {
Bbb=newB();
    }
}

image.gif

结果是:

A的无参数构造器

B的构造器


也就是子类默认会隐式调用父类的构造器,默认在B构造器第一行添加了super();


接着一个例子:


classA{
publicA() {
System.out.println("A的无参数构造器");
    }
publicA(intnum) {
System.out.println("A的有参数构造器,参数为:"+num);
    }
}
classBextendsA{
publicB() {
super(123);
System.out.println("B的构造器");
    }
}
publicclasstest {
publicstaticvoidmain(String[] args) {
Bbb=newB();
    }
}

image.gif

结果是:

A的有参数构造器,参数为:123

B的构造器


显示调用了父类的构造器,就不会隐式调用空构造器了


最后一个例子:

classA{
publicA(intnum) {
System.out.println("A的有参数构造器,参数为:"+num);
    }
}
classBextendsA{
publicB() {
System.out.println("B的构造器");
    }
}
publicclasstest {
publicstaticvoidmain(String[] args) {
Bbb=newB();
    }
}

image.gif

此时A没有空构造器,B也没有显示调用A的构造器,默认隐式调用super A();

但是此时A的空构造器没有定义,所以会报错。


自己在android中也遇到了


image.gif


这个ArrayAdapter没有空构造器,所以这个super去掉是错误的。


综上所述,如果父类有空构造器,super()可以不写,但如果父类只有含参数的构造器,这个super(...)一定要写,并且要对应父构造器的参数,否则就会报错!


================Talk is cheap, show me the code==================

目录
相关文章
layUI提交多个相同name的值
layUI提交多个相同name的值
362 0
|
9月前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
2895 12
|
缓存 网络协议 安全
阿里云DNS常见问题之新疆地区无法访问网址如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
JSON 小程序 JavaScript
微信小程序性能优化
微信小程序性能优化
416 0
|
网络架构
【第二期】计算机网络常识(端口/网段/路由)
【第二期】计算机网络常识(端口/网段/路由)
291 0
|
JSON 小程序 JavaScript
超详细微信小程序开发学习笔记,看完你也可以动手做微信小程序项目
这篇文章是一份全面的微信小程序开发学习笔记,涵盖了从小程序介绍、环境搭建、项目创建、开发者工具使用、文件结构、配置文件、模板语法、事件绑定、样式规范、组件使用、自定义组件开发到小程序生命周期管理等多个方面的详细教程和指南。
|
Unix 应用服务中间件 nginx
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
1249 1
安装nginx:src/os/unix/ngx_user.c:26:7: error: ‘struct crypt_data’ has no member named ‘curren
|
存储 自然语言处理 安全
安全小课堂丨什么是暴力破解?如何防止暴力破解
暴力破解是通过尝试所有可能的密码组合来解密,基于字符集合、有限密码长度和可预测性假设。黑客利用此方法获取未经授权的访问,如入侵系统或账户,可能为了利润、数据盗窃、恶意软件传播等目的。常见的攻击类型包括简单暴力、字典式、混合、反向和撞库。防御措施包括使用复杂密码、双因素认证、限制登录尝试和利用密码管理器。加密、加盐和实时监控也能增强安全性。
|
Java Windows
解决IDEA .properties文件中文乱码的问题
解决IDEA .properties文件中文乱码的问题
4113 0
解决IDEA .properties文件中文乱码的问题
|
XML Java Maven
深入探讨Maven打包:打造精致的Zip包
本文介绍了如何使用Maven将Spring Boot项目打包并部署。首先,利用Maven Assembly Plugin创建包含JAR的ZIP文件,以便于部署和修改配置文件。该插件允许自定义打包内容和格式。在`package.xml`中定义了打包格式、依赖、脚本和资源文件的规则。接着,在POM.xml中配置插件,排除配置文件和静态资源以保持外部。最后,执行`mvn package`命令生成分发包,简化了项目的部署流程。
884 2

热门文章

最新文章