Java——补充:构造⽅法super()与构造⽅法⽆参有参构造⽅法this()与构造
⽅法
参考⽂章:
构造⽅法在new的时候⾃动执⾏。且只执⾏⼀次。new⼀次执⾏⼀次
每个类都有构造⽅法,即使不写也有,编译时javac会⾃动检查类是否有构造⽅法,如果有,就执⾏,没有就⾃动添加⼀个
如果⽗类有含参构造⽅法,则⼦类也必须添加含参构造⽅法
如果⽗类没有含参构造⽅法,⼦类⽆需添加构造⽅法
this在构造⽅法之间的应⽤
super在构造⽅法中的应⽤
⾸先要明⽩super关键字的作⽤:
1、super是调⽤⽗类的成员⽅法或成员变量。
但是还有⼀个问题:.
也就是说⼦类对象中,⽗类的构造⽅法会先执⾏。那么为什么要执⾏⽗类构造⽅法呢?
假设,创建了⼀个⽗类,含有⼀个成员属性a=1;含有⼀个构造⽅法,将a=5;。因为如果⼦类创建的对象调⽤⽗类的成员变量a时,在不添加super()时,会得到a=1;如果添加super()就会得到a=5;我们都知道,构造⽅法在创建对象时执⾏,a应该等于5,故如果不调⽤super()就会得到错误的值。
2、super()在构造⽅法中是调⽤⽗类构造⽅法的意思。
当创建⼦类对象时,⽗类对象先进内存。这样⼦类才能⾃动拥有⽗类的成员。
3、⼦类的构造器,⽆论重载多少个,第⼀⾏必须是super();当你不写时表⽰空参super();是否写参数,要根据⽗类决定,⽗类有参数,那么⼦类的super()必须有参数。
4、构造⽅法⽆法继承,⾃然也没有重写这个概念。
5、super()语句必须是构造⽅法的第⼀⾏代码。
总结⼀下:其实这些内容说⽩了,就是在说⼀句话。
super是⽗类对象引⽤,this是本类对象引⽤。super(),this()都必须放在构造⽅法的第⼀⾏,super()和this()绝不能⼀块⽤,super(),this()⽆参时可以省略不写。
    会报错:
快捷键:ctrl+T  ⽤于打开继承关系图。
⼦类的构造函数必须要 super() 吗?
不是必须,是⾃动
必须的情况:————指明调⽤哪个含参构造函数
public class Father {
public String name;
public Father(String name) {
this.name = name;
}
}
java接口有没有构造方法
public class Son extends Father{
public Son(String name) {
super(name);//必须调⽤,否则他会默认调⽤⽗类的⽆参构造函数,⽽⽗类的⽆参构造函数已经被有参的覆盖,所以不到
}
this()只能⽤在构造函数中,且它必须是第⼀⾏语句?
1.在构造函数中,如果你不指定构造器之间的调⽤关系,那么编译器会给你加上super();⽬的是在初始化当前对象时,先保证了⽗类对象先初始化。所以,你指定了构造函数间的调⽤,那么this()必须在第⼀⾏,以保证在执⾏任何动作前,对象构造函数只能被构造函数调⽤,因为对象只会初始化⼀次。
2.解答这个问题,⾸先要明确⼀下构造⽅法和普通成员⽅法的区别。
类似this()和super()这样的⽅法被称为构造⽅法,顾名思义,他的作⽤就是在JVM堆中构建出⼀个指定类型的对象,如果你调⽤了两个这种形式的⽅法,岂不是代表着构建出了两个对象。
同理,为了避免构建出两个对象这种问题的出现,Java在编译时对这种情况做了强校验,⽤户不能再
同⼀个⽅法内调⽤多次this()或super(),同时为了避免对对象本⾝进⾏操作时,对象本⾝还未构建成功(也就不到对应对象),所以对this()或super()的调在普通的成员⽅法中,如果调⽤super()或者this(),你是想要重新创建⼀个对象吗?抱歉Java为了保证⾃⾝对象的合理性,不允许你做这样的操作。
this()和super()为构造⽅法:
作⽤是在JVM堆中构建出⼀个对象
因此避免多次创建对象,同⼀个⽅法内只能调⽤⼀次this()或super()。
同时为了避免操作对象时对象还未构建成功,需要this()和super()的调⽤在第⼀⾏实现【以此来创建对象】,防⽌异常。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。