super this 为啥不能同时存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super this 为啥不能同时存在相关的知识,希望对你有一定的参考价值。

super和this用法相似,都有两种用法:1. 调用方法   2. 调用构造器

    调用方法时,super与this并不相同,this是当前对象的引用变量,但是super并不是引用变量, 它只是标识要调用父类的方法。因此可以将this赋值给其他变量,不能将super赋值给其他变量。这是可以理解的,因为创建一个对象时,只是创建了当前对象,并没额外创建一个父类对象出来。

    调用构造器时,两者不能同时出现,否则会编译报错。因为两者在使用时,必须保证调用他们是在第一行代码处,在调用他们之前不能有别的代码逻辑。这里的理解是,在子类的构造函数中一定会 先调用父类构造器(因为子类继承了父类的属性,父类构造器可能对这些属性进行了初始化工作,为了保证这些初始化工作一定被执行,所以子类一定会调用父类的构造器,或是隐式调用,或是显式调用),在调用其它构造函数时,其他构造函数也调用了父类构造函数,如果允许this和super调用构造器可以同时存在,那么将会造成实例化一个对象时运行两次super,即初始化两次父类中的变量,这是不合理的。
    同样的super调用构造函数要放在第一行也是为了保证父类中的初始化优先执行,this调用构造函数一定时,一定也会调用super,所以同样因为super要放在第一行,this也必须要放在第一行。

    * 基于这样的逻辑super和this调用构造函数要放在第一行,且不能同时出现在同一个构造器中

参考技术A

楼主:

我觉得你的问题描述的不精确

    在同一构造函数中不能同时用super()和this()

    既不能同时调用父类构造函数和子类构造函数;其实就是无论哪个构造函数中都不能有两个构造函数执行(if else什么的例外)。

    2. 但是在同一构造函数中可以同时用super()和this.成员变量。

本回答被提问者采纳

java中this和super关键字

this表示当前对象,也就是当前类对象。

super表示当前类的父类。

this()语句和super()语句,只能在构造方法中使用,且都只能在构造方法中的第一行,所以他们不能同时出现。

如果一个类有父类,则这个类中所有构造方法中默认存在super()语句,这个语句用来调用父类的构造方法,所以说父类优先创建于子类。

如果这个之类的构造方法中有this()语句,则就不能存在super()语句,this()表示调用当前类的构造方法。

this和this(),this是关键字,代表当前类的对象,可以用了调用当前类的属性和方法,而this()代表当前类的构造方法,只能在构造方法中使用。

 

以上是关于super this 为啥不能同时存在的主要内容,如果未能解决你的问题,请参考以下文章

java中this和super关键字

面向对象

super详解

JAVA基础(十六)Super关键字

为什么静态成员静态方法中不能用this和super关键字

为什么静态成员静态方法中不能用this和super关键字