super和this使用方法

super和this的具体使用

super的具体使用

  1. 概述:代表的是父类引用

  2. 作用:可以调用父类中的成员

  3. 使用:

    a. 调用父类构造方法-> 在子类中的构造中写

    1. super() -> 调用父类无参构造
    2. super(实参) -> 调用父类有参构造

    b. 调用父类成员变量:

    1. super.成员变量名

    c. 调用父类成员方法:

    1. super.成员方法名(实参)

常见用法与注意点

  • 创建子类对象对象时父类的构造方法会以super的形式被调用
    父类如果重写了无参构造器或者父类中没有有参构造器,那么子类的构造方法第一行就是super(),可以省略

  • 如果父类中定义了有参构造器但没有显示写出无参构造器,那么必须通过super调用父类的有参构造函数,如果父类中定义了多个有参构造区,那么用super调用其中一个有参构造器即可

  • 子类重写父类的方法后可以通过super调用到父类的方法

  • 如果一个类没有基础任何父类super相当于调用的是Object中的方法

  • super也不能出现在静态方法/静态代码块中

测试代码

如果一个类没有基础任何父类super相当于调用的是Object中的方法

super也不能出现在静态方法/静态代码块中

public class Fu {
    int num = 10;
    public Fu(){
        System.out.println("父类无参构造");
    }

    public Fu(int data){
        System.out.println("父类有参构造");
    }

    public void method(){
        System.out.println("父类method方法");
    }
}

public class Zi extends Fu{
    int num = 100;
    public Zi(){
        super();//调用父类中的无参构造
        System.out.println("子类无参构造");
    }

    public Zi(int num){
        super(10);//调用父类的有参构造
        System.out.println("子类有参构造");
    }

    public void method(){
        super.method();//调用父类的method方法
        System.out.println("子类method方法");
        System.out.println(num);//子类自己的
        System.out.println(super.num);//调用父类的num
    }
}

public class Test01 {
    public static void main(String[] args) {
        Zi zi = new Zi();
        System.out.println("============");
        Zi zi1 = new Zi(10);
        System.out.println("============");
        Zi zi2 = new Zi();
        zi2.method();

    }
}

2.2 this的具体使用

  1. this概述:代表的是当前对象(哪个对象调用的this所在的方法,this就代表哪个对象)

  2. 作用:

    a. 区分重名的成员变量和局部变量
    b. 调用当前对象中的成员

  3. 使用:

    1. 调用当前对象的构造:在构造中写
      a. this():调用当前对象的无参构造
      b. this(实参):调用当前对象的有参构造
    2. 调用当前对象的成员变量:
      a. this.成员变量名
    3. 调用当前对象的成员方法:
      a. this.成员方法名(实参)
  4. 注意:

    不管是super还是this,只要在构造中使用,都必须在第一行,所以二者不能同时手写出来

常见用法与注意点

  • 1.构造方法中用于标识被同名构造参数屏蔽的实例属性
    对象的属性因为与构造器参数同名而被构造器参数屏蔽时,如果需要调用对象被屏蔽的属性,需要用用this进行标识,例如this.name指的是我这里的调用的是当前对象的属性name而不是构造器的局部变量参数name
  • 2.用于普通方法中,表示正在调用方法的那个对象
    this只能在方法体/非静态代码块块内使用,但是如果在方法内调用同一个类的另一个方法,就不必使用this,直接调用即可,this关键字是能省则省
  • 3.this不能用于静态方法中
    static方法是类方法,依附于类而不依赖与任何对象,static属性是指该属性是类中所有对象所共享的,static方法是类方法,先于任何实例(对象)存在,static在类加载时就已经存在了,但对象是在创建时才生成;方法中使用this关键字它的值是当前对象的引用,只能用它调用属于当前对象的属性和方法和。但是,this可以调用static类型的属性,举个例子:一个父亲是不可能向他还未出生的孩子借钱的,但孩子出生后完全可以找他父亲去借钱,总之:static方法或static代码块内不能出现this,但是this可以调用到静态属性和静态方法
  • 4.父类方法中的this也可能代表的是调用该父类方法的子类的实例对象
    对于一个类中的this,不一定单指这个的对象,也可能是这个类的子类的对象(抽象类里面的this只能是实际调用中它的派生类的实例化对象,因为抽象类本身不能实例化);总之:如果new 父类对象的话,父类方法的this指向的是父类,如果new 子类,那么父类方法的this指向的是子类
  • 5.private/fianl/abstract类非抽象方法中,使用this的注意点
    父类方法中的this可能是代表自己的实例对象,也可能代表子类的实例对象,这一点要看具体用哪个对象调用的,以下几类特殊方法需要特别关注
    • 父类的private方法:private则代表该父类方法只能在父类它本身类范围内调用,子类无法重写也无法调用,private方法中的this对象只能是代表父类自己的实例对象指针
    • 抽象类型父类中的非抽象方法:抽象类是无法实例化的,所以abstract类中的非抽象方法中的this对象只能是代表子类自己的实例对象指针
    • 父类的final修饰方法,意味着子类无法去重写该方法,但不影响子类对象直接去调用父类的final方法,所以final方法中的this对象既可以代表子类自己的实例对象指针,又可以代表父类本身的实例对象指针
  • 6.用于在构造函数中调用其他构造函数
    只能定义在构造函数的第一行,因为初始化动作要先执行,如果是用this调用本列无参构造器可省略,如果用this调用的是有参构造器就不能省略,而且this只能调用一次构造器
public class Person {
    int num = 10;
    public Person(){
        //this(10);
        System.out.println("Person无参构造");
    }

    public Person(int data){
        //super();super和this不能同时再构造中出现
        this();
        System.out.println("Person有参构造");
    }

    public void method(){
        int num = 20;
        System.out.println(num);//20
        System.out.println(this.num);//10
        this.method01();
        System.out.println("Person类method方法");
    }

    public void method01(){
        System.out.println("Person类method01方法");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("========");
        Person person1 = new Person(10);
        System.out.println("========");
        Person person2 = new Person();
        person2.method();
    }
}

以上仅为个人学习笔记

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值