美文网首页
Java 中的 this 和 super 关键字

Java 中的 this 和 super 关键字

作者: FoxLayla | 来源:发表于2019-02-17 23:17 被阅读20次

    Java 中的 this 和 super 关键字

    this 的用法

    this指向的是当前对象,是当前对象的引用,利用this关键字可以访问当前对象的字段和方法,其用法为:

    1. 访问当前对象的字段

      尤其是形参和当前对象字段同名时,使用this能将二者进行区分

      例如:

      public class Animal() {
        private int age;
        private double weight;
      
        public Animal(int age, double weight) {
          this.age = age; // 其中,this.age指代Animal的字段、age指代Animal构造函数的形参
          this.weight = weight;
        }
      }
      
    2. 调用当前对象的方法

      在当前的对象的方法中可以使用this关键字调用该对象的其他方法

      public class Calc() {
        private int result;
      
        public Calc(int initial) {
          this.result = initial;
        }
        
        public add() {
          return this.result + 1;
        }
        
        public printResult() {
          System.out.println(this.add()); // 调用Calc的add()方法
        }
      }
      
    3. 调用当前对象的构造函数

      当对象的构造函数的参数较多时,可以利用this关键字将构造函数进行拆分

      public class User {
        public String username;
        public String password;
        public String email;
        
        public User(String username, String password) {
          this.username = username;
          this.password = password;
        }
        
        public User(String username, String password, String email) {
          this(username, password); // 调用另一个构造函数
          this.email = email;
        }
      }
      

    super 的用法

    super指向的是父类对象,是父类对象的引用,其用法主要有:

    1. 访问父类的字段和方法

      • 当子类中的字段和父类同名时,父类中对应的字段会被隐藏(即使两个字段的类型不同);
      • 当子类重写了父类的方法时,父类中对应的方法会被隐藏。

      在这两种情况下,如果想在子类中访问父类中的字段和方法可以利用super关键字。

      例如:

      public class Animal() {
        public Animal() {}
        public void cry() {
          System.out.pintln("嗷呜");
        }
      }
      
      public class Cat extends Animal() {
        pulic Cat() {}
        public void cry() {
          super.cry(); // 调用父类Animal的cry()方法
          System.out.println("喵呜");
        }
      }
      
    1. 调用父类的构造函数

      如果父类的构造函数是带参数的,子类需要通过super关键字显式的调用父类的构造函数来继承父类。

      例如:

      public class Animal() {
        private int age;
        private double weight;
      
        public Animal(int age, double weight) {
          this.age = age;
          this.weight = weight;
        }
      }
      
      public class Cat extends Animal() {
        public Cat(int age, double weight) {
          super(age, weight); // 调用父类的构造函数
        }
      }
      

    相关文章

      网友评论

          本文标题:Java 中的 this 和 super 关键字

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