super和this关键字的详解

this关键字

this关键字主要有三个作用

  1. this调用本类中的属性,也就是类中的成员标量。
  2. this调用本类中的其他方法。
  3. this调用本类中的其他构造方法,需要放在构造方法的首行。

  • 引用成员变量
    • Public Class Student { 
       String name;
       private void SetName(String name) { //定义一个参数(局部变量)name
        this.name=name; //将局部变量的值传递给成员变量
       }
      }

       

  • 调用类的构造构造方法
    • public class Student { //定义一个类,类的名字为student。 
       public Student() { //定义一个方法,名字与类相同故为构造方法
        this(“Hello!”);
       }
       public Student(String name) { //定义一个带形式参数的构造方法
       }
      }

       

super关键字(使用场景:必须在出现继承的类中才能使用)

  1. super调用父类构造器
  2. super调用普通方法
  • super调用父类构造方法
    • 案例分析
      • class pareant{
        10     public pareant(){
        11         System.out.println("这是父类的构造方法");
        12     }
        13 }
        14 
        15 class person extends pareant{
        16     public person(){
        17         super();
        18         System.out.println("这时子类构造方法");
        19     }
        20 }                                                                              
        21 
        22 public class SuperTest{
        23 
        24     public static void main(String args[]){
        25         person p = new person();
        26     }
        27 }
        28 

        终端输出:

        • 这是父类的构造方法
          这时子类构造方法
    • 注意
      • 当父类存在无参构造器时,当调用子类无参构造器时,系统会自动在子类无参构造器前加上super(),表示先调用父类的无参构造器。此时super语句乐意省略,此时子类可以使用this调用构造方法
      • 当弗雷不存在无参构造器时,必须在子类构造方法中使用super(参数),明确指定调用父类的拿一个构造器。此时super不能省略,并且此事子类不能使用this调用自身的构造方法
    • 案例分析
      • class Person{
            private String name;
            private int age;
            public Person(String name){
                this.name = name;
            }
            public Person(String name, int age){
                this(name);   //this调用构造方法必须放在第一行,这里这样写是为了避免代码重复
                this.age = age;
            }
            public Person(){
                System.out.println("1.Person类的构造方法");
            }
        }
         
        class Student extends Person{
            private String school;
         
            public Student(){
                super("yy");
                System.out.println("Student类的构造方法");
            }
         
            public Student(String school){
                this();
                //super("yy");    //对super的调用必须在构造方法的第一行
                System.out.println("2.Student类的构造方法");
            }
        }
         
        public class Test{
            public static void main(String[] args){
                Student stu = new Student("beida");
            }
        }

        终端的输出

        • Student类的构造方法
          2.Student类的构造方法

      • 注意
        • 父类含有无参构造方法所以在子类中可以使用this关键字来调用子类的构造方法,此时得省去super语句,免得跟this冲突,但省去后系统依旧会帮你加上,但不会报错,若不省去则会报错

posted @ 2021-04-26 20:09  zou-ting-rong  阅读(117)  评论(0编辑  收藏  举报