Java构造体的执行的知识点,和this知识点
Java构造体的执行
默认构造体
调用子类构造体执行时,会调用默认的父类构造体
//特别注意点 此处是this
Parent类中的this.test();时,会调用Parent自身的方法
如下代码执行结果
public class TestMain {
public static void main(String[] args) {
new Child();
}
static class Parent{
public Parent() {
//特别注意点 此处是this
this.test();
}
//特别注意点 此处是public
public void test(){
System.out.println("Parent");
}
}
static class Child extends Parent
{
public Child() {
this.test();
}
@Override
public void test(){
System.out.println("Child");
}
}
}
执行结果
Child
Child
Process finished with exit code 0
=======================================================
=======================================================
调用子类构造体执行时,会调用默认的父类构造体
//特别注意点 此处是this
this.test();时,会调用Parent自身的方法
如下代码执行结果
public class TestMain {
public static void main(String[] args) {
new Child();
}
static class Parent{
public Parent() {
//特别注意点 此处是this
this.test();
}
//特别注意点 此处是private,
private void test(){
System.out.println("Parent");
}
}
static class Child extends Parent
{
public Child() {
this.test();
}
//@Override,如果不注释,编译会出错
public void test(){
System.out.println("Child");
}
}
}
执行结果
Parent
Child
Process finished with exit code 0
=======================================================
当有父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。
this是指的是写在哪个类中的类,方法是可以 @Override的
知识点
总结1:
java继承中对构造函数是不继承的。
总结2:
如果父类没有无参构造函数
创建子类时,不能编译,除非在构造函数代码体中第一行,必须是第一行显示调用父类有参构造函数
如果不显示调用父类有参构造函数,系统会默认调用父类无参构造函数super();
但是父类中没有无参构造函数,那它不是不能调用了。所以编译就无法通过了。
总结3:
创建有参构造函数后,系统就不再有默认无参构造函数。
如果没有任何构造函数,系统会默认有一个无参构造函数。
=======================================================
this指向
this是一个写在哪个类中,指向哪个类的
相同的则会覆盖,看下面的例子
public class TestMain {
public static void main(String[] args) {
new Child();
}
static class Parent{
public String value ="Parent.Value";
public Parent() {
this.test();
}
public void test(){
System.out.println("Parent");
System.out.println(this.value);//此处将会输出null
}
}
static class Child extends Parent
{
public String value ="Child.Value";
public Child() {
this.test();
}
public void test(){
System.out.println("Child");
System.out.println(this.value);
}
}
}
结果
Child
null
Child
Child.Value
Process finished with exit code 0
网友评论