美文网首页
Java构造体的执行,this指向

Java构造体的执行,this指向

作者: Visualing | 来源:发表于2018-03-26 21:25 被阅读0次

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

相关文章

  • Java构造体的执行,this指向

    Java构造体的执行的知识点,和this知识点 Java构造体的执行 默认构造体调用子类构造体执行时,会调用默认的...

  • Java代码块的执行顺序

    执行顺序首先执行静态代码块接着执行构造代码块最后指向构造方法 静态代码块 >>> 构造代码块 >>>> 构造方法 ...

  • class

    验证super内部this指向:在super()执行时,它指向的是子类B的构造函数,而不是父类A的构造函数。也就是...

  • PostConstruct注解

    PostConstruct在构造函数之后执行,init()方法之前执行;他是Java自己的注解,对象被构造前执行,...

  • Java中父子类的那些事

    Java中父子类的那些事 构造方法 1、子类构造方法执行时,都会先执行父类的构造方法,若没有显式地调用父类的构造方...

  • new 操作符都做了些什么

    创建一个空对象 然后让这个空对象的proto 指向构造函数的prototype 执行构造函数,将属性或者方法添加...

  • js中构造函数创建类的方法

    构造函数创建类 1.创建一个对象 2.this指针指向这个对象 3.执行构造函数中的代码 4.将构造函数返回 改变...

  • 面向对象的程序设计

    构造函数模式 new 操作符创建一个新对象将构造函数的作用域赋给新对象(this指向新对象)执行构造函数中的代码(...

  • 构造方法

    java里的构造方法其实就是一个类被实例化时最先执行的就是构造方法在java里如果一个类没有构造方法,那么JVM就...

  • js 对象 原型 继承

    对象 实现new 创建一个新对象; 将构造函数的作用域赋给新对象(因此this就指向了这个新对象); 执行构造函数...

网友评论

      本文标题:Java构造体的执行,this指向

      本文链接:https://www.haomeiwen.com/subject/kecdcftx.html