this 与 super 关键字的用法与区别

目录

1.this

2.super

3.二者之间的区别


1.this

this关键字代表自身类的对象

使用this可以引用成员变量和成员方法

例:

public class Demo {

    int num=0;   //成员变量

    public Demo(int num){  //有参构造
        this.num=num;
    }

    public Demo(){   //在无参构造方法里为成员初始化值
        this(5);
    }

    public void method1(){
        System.out.println("成员方法1");
    }

    public void method2(){
        System.out.println("成员方法2");
        int a=this.num;    //使用this调用成员变量
        System.out.println("a的值为 :"+ a);
        this.method1();    //使用this调用成员方法
    }

    public static void main(String[] args) {
        new Demo(8).method2();
    }
}

     通过上图我们可以看到, 构造方法中有两个 num ,这时我们就可以用this来区分它们,因为this始终调用成员变量,这里我们是将参数的值传给了成员变量

需要注意一点 : this关键字必须放在非静态方法里面

我们可以看出,主方法是静态的,所以我们无法在main里面去使用this

这是因为 : 静态成员是随着类一起加载的,this代表我们当前的对象,这时类才刚加载,对象还没有创建,所以我们是无法在静态方法里面使用this的,静态成员是优先于对象存在

另外,在上述例子中,我们可以在无参构造中使用this(参数),调用有参构造来初始化值

测试: 

 输出 : 

2.super

super关键字代表父类的引用,在程序中主要的用途
    • 在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。
    • 用“super.成员变量名”来引用父类成员变量
    • 用“super.方法名(参数列表)”的方式访问父类的方法。
例 :   父类
public class Birds {   //鸟类

    String wing;  //翅膀

    public Birds(){}

    public Birds(String wing){
        this.wing=wing;
    }

    public void method(){
        System.out.println("鸟有羽毛");
    }

}

子类 :

public class Ostrich extends Birds{    //鸵鸟类

    public Ostrich(){
       //super();       //调用父类无参
        super("qw");    //调用父类有参
    }

    public void method1(){
        String str = super.wing;
        System.out.println("鸵鸟会跑");
        super.method();
    }
    
}

       super()代表父类的构造方法,我们可以传参数进去,不传代表调用父类的无参构造方法,但前提是父类得有无参的构造方法

      另外 : 如果子类的构造方法中没有显式地调用父类构造方法,则系统默认调用父类无参数的构造方法

同样super也能调用父类的成员变量和成员方法

如上述例子,我们必须把super()语句放在子类构造方法第一行,不然就会报错

需要注意 : super也无法在静态方法里使用

例: ,会报错

3.二者之间的区别

this : 代表当前自身类的对象,可以调用当前类的构造方法,成员变量和成员方法等

super : 代表对父类的引用 , 可以调用父类构造方法,成员变量和方法

但是它们都不能在静态方法里使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值