javaSE-关键字this-super

一、this关键字:

  • “this(实际参数列表)”出现在构造方法第一行,通过当前的构造方法去调用本类当中其它的构造方法。其目的是为了代码复用。
  • this不能使用在static的方法中
  • this出现在实例方法中,谁调用这个实例方法,this就代表谁,this代表当前正在执行这个动作的对象。
  • this可以看做一个变量,它是一个引用,存储在Java虚拟机"堆"内存的对象内部,this这个引用保存了当前对象的内存地址指向自身
  • this大部分情况下可以省略,在方法中区分实例变量和局部变量的时候不能省略。
public class Date {
    private int year;
    private int month;
    private int day;
    //业务要求,默认创建的日期为1970年1月1日
    public Date(){
        this.year = 1970;
        this.month = 1;
        this.day = 1;
    }
    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public int getDay() {
        return day;
    }
    public void setDay(int day) {
        this.day = day;
    }
}

二、关键字super:

  • super不能出现在静态方法中。
  • “super(实际参数列表);”语法表示调用父类的构造方法,代码复用性增强了,完成当前对象的父类型特征的初始化操作。
  • super(实际参数列表) 这行代码和 “this(实际参数列表)”  都是只允许出现在构造方法第一行,所以这两行代码是无法共存的。
  •  
  • super的使用:
  •         super.属性名                  【访问父类的属性】
  •         super.方法名(实参)        【访问父类的方法】
  •         super(实参)                   【调用父类的构造方法】
public class People {
    String idCard;
    String name;
    boolean sex;

//无参构造
public People(){ } //父类构造方法 public People(String idCard,String name,boolean sex){ this.idCard = idCard; this.name = name; this.sex = sex; } }

 

public class Student extends People{
//学号是子类特有的 int sno;
//无参数构造 public Student(){ } //子类构造方法使用super(实际参数列表) 实现代码复用 public Student(String idCard,String name,boolean sex,int sno){ super(idCard,name,sex); this.sno = sno; } }
//测试
public class StudentTest {
    public static void main(String[] args) {
        Student s = new Student("12345x","jack",true,100);
        System.out.println("身份证号" + s.idCard);
        System.out.println("姓名" + s.name);
        System.out.println("性别" + s.sex);
        System.out.println("学号" + s.sno);
    }
}

//输出结果:
// 身份证:12345x
//姓名:jack
//性别:true
//学号:100
//
posted @ 2022-04-11 10:41  280887072  阅读(17)  评论(0编辑  收藏  举报