简述java中this,和super关键字的区别和作用

简介: 简述java中this,和super关键字的区别和作用

super

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。

所以,super关键字有以下用法:

1, 引用: 父类对象 访问父类被遮盖的属性或调用父类被覆盖的方法。

super. :调用父类中属性或者方法

super.父类属性名:调用父类中的属性

super.父类方法名:调用父类中方法


2,super():用在子类的构造方法中,能够决定jvm在去构造父类对象时,调用父类哪一个构造方法

super(); 调用父类的无参构造方法

super(实参);调用父类的有参构造方法

super必须放在构造方法中的第一个语句

如果一个构造方法的第一句话,不是this(。。。),也不是super(。。。),
系统会默认添加 super();

  • super常常用来把构造参数传给父类,去设置父类的属性;
  • 构造方法常常用来设置属性,给属性赋值。
    构造方法中无参构造方法很重要,要尽量保证每个类都写一个无参构造方法

this关键字:

this关键字两个重要用法:

1, 引用 当前对象 当实例变量和局部变量命名冲突的时候,用this,表示实例变量

this.属性名 表示当前对象的属性

this.方法名(实参); 表示调用当前对象的方法

用在构造方法或者成员方法中

注意:当局部变量和成员变量 发生冲突时,使用this.进行区分

若不冲突,写不写this.都可以


2, 用在构造方法中 this(参数1,参数2,….) 调用本类的其他构造方法

必须是构造方法中的第一个语句,所以this只能用一次调用其他构造方法(同super)

this();调用当前对象的无参构造方法

this(实参); 调用当前对象的有参构造方法

只能定义在构造方法内,只能定义在有效代码第一行


注意:避免构造方法的递归调用

下面程序清晰讲明了super,this关键字的区别和作用:

   class TestSuper{
      public static void main(String[] args) {
         new B();//调用B  的无参构造方法
          System.out.println("--------------");
          new B("abcd");
      }
    }
    class A{
      private String name;
      public A(){
        System.out.println("A()");
      }
      public A(String str){
        this.name = str;
        System.out.println("A(String)"+name);
      }
    }
    class B extends A{
      public B(){
        super();  //默认添加,可写可不写,调用父类无参构造方法
        System.out.println("B()");
      }
      public B(String str){
        super(str);
        System.out.println("B(String)");
      }
    }
    //测试super关键字和this关键字的使用与区别
    class Super{
      protected int a= 10;
      public void method(){
        System.out.println("Super method()");
      }
    }
    //继承父类Super
    class Sub extends Super{
      int a = 20;
      //方法 的覆盖
      public void method(){
        System.out.println("Sub method()");
      }
      public void print(){
        int a = 30;
        System.out.println(a);//30,局部变量优先
        System.out.println(this.a);//20    引用当前实例对象
        System.out.println(super.a);//10  父类引用
        method();//sub method();  
        super.method();//Super method();
      }
    }
目录
相关文章
|
9天前
|
Java
java基础(4)public class 和class的区别及注意事项
本文讲解了Java中`public class`与`class`的区别和注意事项。一个Java源文件中只能有一个`public class`,并且`public class`的类名必须与文件名相同。此外,可以有多个非`public`类。每个类都可以包含一个`main`方法,作为程序的入口点。文章还强调了编译Java文件生成`.class`文件的过程,以及如何使用`java`命令运行编译后的类。
15 3
java基础(4)public class 和class的区别及注意事项
|
4天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
13 4
ly~
|
7天前
|
安全 Java 大数据
php跟java有什么区别
PHP 和 Java 是两种常用编程语言,各有特色。PHP 语法简洁灵活,适用于快速开发中小型网站,尤其在 Web 脚本和数据库交互中表现出色。Java 则语法严谨,强类型特性使其在企业级应用、移动开发及大数据处理中更受欢迎,具备高稳定性和安全性。通过优化,PHP 性能可提升,而 Java 在大规模应用中表现更佳。总体而言,PHP 开发效率高但维护性稍差,Java 则更注重代码质量和安全性。
ly~
16 5
|
13天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
17天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
18 3
|
28天前
|
Java 开发者
【Java编程新纪元】JDK 22:超级构造函数来袭,super(...) 前导语句改写编程规则!
【9月更文挑战第6天】JDK 22的超级构造函数特性是Java编程语言发展史上的一个重要里程碑。它不仅简化了代码编写,还提升了代码的可读性和维护性。我们有理由相信,在未来的Java版本中,还将有更多令人兴奋的新特性等待我们去发现和应用。让我们共同期待Java编程新纪元的到来!
|
2月前
|
XML JSON 前端开发
Java @RequestParam和@RequestBody的区别是什么?
【8月更文挑战第28天】Java @RequestParam和@RequestBody的区别是什么?
33 5
|
2月前
|
Java 程序员
详解Java中的抽象类与接口的区别
【8月更文挑战第24天】
26 0
|
4月前
|
缓存 安全 Java
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
《volatile使用与学习总结:》多层面分析学习java关键字--volatile
28 0
|
5月前
|
安全 Java 编译器
Java多线程基础-6:线程安全问题及解决措施,synchronized关键字与volatile关键字(一)
线程安全问题是多线程编程中最典型的一类问题之一。如果多线程环境下代码运行的结果是符合我们预期的,即该结果正是在单线程环境中应该出现的结果,则说这个程序是线程安全的。 通俗来说,线程不安全指的就是某一代码在多线程环境下执行会出现bug,而在单线程环境下执行就不会。线程安全问题本质上是由于线程之间的调度顺序的不确定性,正是这样的不确定性,给我们的代码带来了很多“变数”。 本文将对Java多线程编程中,线程安全问题展开详细的讲解。
82 0
下一篇
无影云桌面