关于java中构造函数的一些知识详解
作者:jingxian 发布时间:2023-11-27 22:09:11
标签:java,构造函数
java的构造函数是一个非常重要的作用,首先java里的构造函数是可以重载的,而且因为也是可以继承在父类的构造函数,所以在子类里,首先必然是调用父类的构造函数。可以看下面的两个例子来对比:
public class Test
{
public static void main(String args[])
{
B b = new B(100);
}
}
class A
{
public A()
{
System.out.println("A without any parameter");
}
public A(int i)
{
System.out.println("A with a parameter");
}
}
class B extends A
{
public B()
{
System.out.println("B without any parameter");
}
public B(int i)
{
System.out.println("B with a parameter");
}
}
这个例子最后输出的是
A without any parameter
B with a parameter
可以看到首先调用的是父类的构造函数,然后再是调用自己的构造函数。但是因为这里的B类中的有参数的构造函数是没有super父类,所以导致它只会执行父类的没有参数的构造函数。如果要让它执行有参数的父类的构造函数,那么就要这样写代码:
public class Test
{
public static void main(String args[])
{
B b = new B(100);
}
}
class A
{
public A()
{
System.out.println("A without any parameter");
}
public A(int i)
{
System.out.println("A with a parameter");
}
}
class B extends A
{
public B()
{
System.out.println("B without any parameter");
}
public B(int i)
{
super(i); //这里就是继承自父类的有参数的构造函数
System.out.println("B with a parameter");
}
}
所以最后输出的是:
A with a parameter
B with a parameter
因此,派生类必须通过super来调用父类的含有参数的构造函数。以下再附一道题:
public class Test extends X
{
Y y = new Y();
Test()
{
System.out.print("Z");
}
public static void main(String args[])
{
new Test();
}
}
class X
{
Y b = new Y();
X()
{
System.out.print("X");
}
}
class Y
{
Y()
{
System.out.print("Y");
}
}
输出的结果是什么?
首先我们来分析这道题:
因为首先看这个main函数,这个main函数只有一句代码: new Test();因为发现这个Test类是继承自X,所以首先要构造X,那么就进行X类的运行 Y b = new Y(),然后我们可以看到输出的Y,然后就是执行X类的构造函数,输出X;接着就是构造Y,然后执行Test自己的构造函数,输出Z,所以输出结果是YXYZ。
0
投稿
猜你喜欢
- 在我们日常开发过程中,通常会涉及到数据权限问题,下面以我们常见的一种场景举例:一个公司有很多部门,每个人所处的部门和角色也不同,所以数据权限
- 在分布式系统中,我们会需要 ID 生成器的组件,这个组件可以实现帮助我们生成顺序的或者带业务含义的 ID。目前有很多经典的 ID 生成方式,
- 1、错误的解决方案1.1、 先更新数据库,再删除缓存若数据库更新成功,删除缓存操作失败,则此后读到的都是缓存中过期的数据,造成不一致问题。1
- 实现要求1、使用Java图形界面组件设计软件,界面如图所示。2、软件能够满足基本的“加、减、乘、除"等运算要求。3、程序代码清晰,
- 概述不知道大家在平时的开发过程中或者源码里是否留意过内部类,那有思考过为什么要有内部类,内部类都有哪几种形式,静态内部类和普通内部类有什么区
- 简单实现了下:import javax.crypto.BadPaddingException;import javax.crypto.Cip
- 0. Iochttps://docs.spring.io/spring-framework/docs/current/spring-fram
- 本文实例为大家分享了java利用数组随机抽取幸运观众的具体代码,供大家参考,具体内容如下思想:首先将所有观众姓名生成数组,然后获取数组元素的
- 前言现在开发大部分都是服务化或者微服务,数据交换都是跨服务的,这里记录java调取其他接口的方法,下面话不多说了,来一起看看详细的介绍吧。j
- 1、mybatis-plus相信大家在日常的开发中用的最多的就是 mybatis-plus了吧,作为一个 MyBatis (opens ne
- 顺序语句顺序顾名思义就是程序自上而下执行public class User { public static voi
- 1、安装依赖<dependency> <
- SpringMVC接收到请求和数据后,进行一些了的处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎
- 一. 项目需求我们做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的开源框架,最常见的就是mycat,shar
- Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就是JDK(Java
- 引言在高并发的场景下,异步是一个极其重要的优化方向。前段时间,生产环境发生一次事故,笔者认为事故的场景非常具备典型性 。写这篇文章,笔者想和
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- spring mvc中的@PathVariable是用来获得请求url中的动态参数的,十分方便,复习下: @Controller publ
- 配置不生效的解决办法注意:如果配置不生效,则说明spring优先加载了其他配置:解决办法:添加启动参数 -Dlogging.config=c
- 前言:我们每天都在编写Java代码,编译,执行。很多人已经知道Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.cl