Java构造函数轻解读

构造函数基础

作用:构建当前类的对象
分类:无参构造函数、有参构造函数
特点:无返回值(注意区分与void的区别)、方法名与类名相同
写法:

模板:
	权限修饰符  类名 ([参数列表]) [抛出异常]{
		[函数体]
	}
			
[]中为可选项,所以/最简\模板为:
			权限修饰符  类名 () {}

要点:

  • 若该类没有定义构造函数,系统会默认生成一个无参构造函数
  • 其中权限修饰符[privatre、protected、默认修饰符(什么都不写)、private]均可使用
  • 构造函数不能用static、final修饰
  • 有参构造函数的函数体不是必须

常见问题:可以有与构造函数同名的方法吗?
答:可以

例如:
public class Singleton {
       String name;
       private volatile static  Singleton singleton;
   
       Singleton() {
           System.out.println("父类无参构造函数");
       }
       private void Singleton() {
           System.out.println("与构造函数同名的 无 参方法");
       }
       
       protected Singleton(String name) {
           this.name = name;
           System.out.println("父类有参构造函数");
       }
       public void Singleton(String name) {
           System.out.println("与构造函数同名的 有 参方法");
       }
}

进阶——继承与构造函数的奇妙反应

要点:调用子类构造函数时会先调用父类的构造函数
如当前有Son和Father两个类
Father类 Son类

当调用Son的构造函数时,均会隐性的调用Father的无参构造函数,即调用了super( );
现在我们将Father的无参构造函数删除,仅保留有参构造函数,对Son会有什么影响?
将Father的无参构造函数删除后,Son的两个构造函数均爆红,提示信息为There is no default constructor available in ‘f_and_s.Father’,即缺少Father的无参构造函数。
Q:如何在不修改Father类的情况下,使Son的构造函数好使?
A:在Son的每个构造函数的第一行调用父类的有参构造函数即可,如下图(此处将Son的name属性添加了static修饰)
解决图示
super( )未放置于第一行报错(Call to ‘super()’ must be first statement in constructor body):
未将super()放至第一行将报错
结论:Son类的构造函数必须隐性或显性的调用父类的构造函数,且必须在自己构造函数的第一行调用。

\ \ \若有错请在评论区指出,共同学习,共同进步/ / /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值