Java - this & super

简介: Java - this & super

this


  • a、this构造方法调用只能放在构造函数之间调用,不能放在普通方法里使用。
  • b、this在类中就是代表当前对象,可以通过this关键字完成当前对象的成员属性、成员方法和构造方法的调用。
  • c、当在定义类中的方法时,如果需要调用该类对象,就可以用this来表示这个对象。也就是说,但凡在本类功能内部使用到了本类对象,都用this表示。至于代表哪个对象,就看其所在功能被哪个对象调用,这样就知道谁在参与运算。

案例分析

Ps:需要借助于this关键字调用,并且如果用this调用的是构造函数,不能放在普通方法里使用;如果调用的普通方法,则可以,甚至可以省略this关键字。

super


如何区分调用的是继承父类的方法还是子类自己重写的方法?

  • 子类的构造的过程中必须调用其父类的构造方法,如果想调用父类带参的构造方法,则需要在子类构造方法第一行“super(arg0, arg1...)”。
  • 如果子类的构造方法中没有显式标注,则系统系默认调用父类无参的构造方法。
  • 如果子类构造方法中既没有显式标注,且父类中没有无参的构造方法(有其他构造,但没有显示标出无参构造),则编译出错。
  • 使用super调用父类指定构造方法,必须在子类的构造方法的第一行。

Ps:一个构造方法中,this和super只能存在一个,因为一山不容二虎,以及它们都在抢占第一行位置,所以会CE。

案例分析

Ps:第 3 处是正确的,因为当前找不到就自动像上级去找。

附:在构造器中为什么 this 或 super 必须放在第一行?

this()和super()是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的;

在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行;

在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。

也就是说你必须在构造器的第一行放置super或者this构造器,否则编译器会自动地放一个空参数的super构造器的,其他的构造器也可以调用super或者this,调用成一个递归构造链,最后的结果是父类的构造器(可能有多级父类构造器)始终在子类的构造器之前执行,递归的调用父类构造器。无法执行当前的类的构造器。也就不能实例化任何对象,这个类就成为一个无为类。

从另外一面说,子类是从父类继承而来,继承了父类的属性和方法,如果在子类中先不完成父类的成员的初始化,则子类无法使用,应为在java中不允许调用没初始化的成员。在构造器中是顺序执行的,也就是说必须在第一行进行父类的初始化。而super能直接完成这个功能。This()通过调用本类中的其他构造器也能完成这个功能。

因此,this()或者super()必须放在第一行。

所以当你看到子类的构造器经过的时候,还没经过方法体就马上再去走父类构造器的时候,好像如果子类没有写super的话,就不会经过方法体,其实程序内部给他补充了一个“super()”,只是表面没经过罢了。

目录
相关文章
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
1788 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
Java
Java中的this关键字
Java中的this关键字
272 1
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
838 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
Java 开发者
【Java编程新纪元】JDK 22:超级构造函数来袭,super(...) 前导语句改写编程规则!
【9月更文挑战第6天】JDK 22的超级构造函数特性是Java编程语言发展史上的一个重要里程碑。它不仅简化了代码编写,还提升了代码的可读性和维护性。我们有理由相信,在未来的Java版本中,还将有更多令人兴奋的新特性等待我们去发现和应用。让我们共同期待Java编程新纪元的到来!
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
359 0
Java的this关键字的使用
Java的this关键字的使用
344 3
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
246 0