Java构造体的执行,this指向

2018-03-26  本文已影响0人  Visualing

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
上一篇 下一篇

猜你喜欢

热点阅读