• 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冲突,但省去后系统依旧会帮你加上,但不会报错,若不省去则会报错

    笨鸟先飞
  • 相关阅读:
    (转)悲催IT男的心酸恋爱史
    javascript递归函数问题
    《Professional Javascript For Web Developers 3rd Edition》读书笔记:javascript闭包中的this对象
    X509Store获取不到证书的问题
    [源码解析] PyTorch 分布式(7) DistributedDataParallel 之进程组
    [源码解析] PyTorch 分布式(8) DistributedDataParallel之论文篇
    [源码解析] PyTorch 分布式(10)DistributedDataParallel 之 Reducer静态架构
    [源码解析] PyTorch 分布式 Autograd (2) RPC基础
    [源码解析] PyTorch 分布式(9) DistributedDataParallel 之初始化
    [源码解析] PyTorch 分布式(12) DistributedDataParallel 之 前向传播
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/14702266.html
Copyright © 2020-2023  润新知