Java当中的关键字:this和super

文章目录

 

this

  • this介绍

this是Java中的关键字,它的作用和其词义很接近,这个。它在方法内部使用,即这个方法所属对象的引用;它在构造器内部使用,表示该构造器正在初始化的对象。

this 可以调用类的属 性、方法和构造器
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。
具体的:我们可以用this来区分属性和局部变量。
比如:this.name = name;

 

  • this调用对象中的属性,构造器和方法

规则:

在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。不过,通常我们都习惯省略this。
当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量
使用this访问属性和方法时,如果在本类中未找到,会从父类中查找
this可以在一个类中相互调用构造器
 

this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法

class Person {
 private String name;//实例成员变量
 private int age;
 private String sex;

 //默认构造函数 构造对象
 public Person() {
 //this调用构造函数
 this("bit", 12, "man");//必须放在第一行进行显示
 }

 //这两个构造函数之间的关系为重载。
 public Person(String name,int age,String sex) {
 this.name = name;
 this.age = age;
 this.sex = sex;
 }
 public void show() {
 System.out.println("name: "+name+" age: "+age+" sex: "+sex);
 }
}
public class Main{
 public static void main(String[] args) {
 Person person = new Person();//调用不带参数的构造函数
 person.show();
 }
比特科技
}
// 执行结果
name: bit age: 12 sex: man

我们会发现在构造函数的内部,我们可以使用this关键字,构造函数是用来构造对象的,对象还没有构造好, 我们就使用了this,那this还代表当前对象吗?当然不是,this代表的是当前对象的引用

super

  • super介绍

由子类访问父类中的属性、方法

super是Java的关键字,在Java类中使用super调用父类中指定操作:

  1. super可用于访问父类中定义的属性,protected,public,defuat
  2. super可用于调用父类中定义的成员方法
  3. super可用于在子类构造器中调用父类的构造器
  • 当父类中没有无参的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)调用本类或者父类中相应的构造器。只能”二选一“,且必须放在构造器的首行。
  • 子类中的所有构造器默认都会访问父类中空参数的构造器
  • 如果子类构造器中既未显式调用父类或本类的构造器,且父类中没有无参的构造器,编译出错

注意:

1.当子父类出现同名成员时,可以使用super指明调用的是父类中的成员

2.super的追溯不仅限于直接父类

3.子类继承父类,子类构造的时候,需要首先帮助父类进行构造

4.super和this用法很像,this代表对本类对象的引用,super代表获取到父类实例的引用

  • super调用父类的属性,构造器,方法

使用super来调用父类的构造器

class Animal {
 public String name;
 public Animal(String name) {
 this.name = name;
 }
 public void eat(String food) {
 System.out.println(this.name + "正在吃" + food);
 }
}
class Cat extends Animal {
 public Cat(String name) {
 // 使用 super 调用父类的构造方法.
 super(name);
 }
}
class Bird extends Animal {
 public Bird(String name) {
比特科技
 super(name);
 }
 public void fly() {
 System.out.println(this.name + "正在飞 ︿( ̄︶ ̄)︿");
 }
}
public class Test {
 public static void main(String[] args) {
 Cat cat = new Cat("小黑");
 cat.eat("猫粮");
 Bird bird = new Bird("圆圆");
 bird.fly();
 }
} 

使用super调用父类的普通方法

public class Bird extends Animal {
 public Bird(String name) {
 super(name);
 }
 @Override
 public void eat(String food) {
 // 修改代码, 让子调用父类的接口.
 super.eat(food);
 System.out.println("我是一只小鸟");
 System.out.println(this.name + "正在吃" + food);
 }
}

在这个代码中, 如果在子类的 eat 方法中直接调用 eat (不加super), 那么此时就认为是调用子类自己的 eat (也就是递 归了). 而加上 super 关键字, 才是调用父类的方法.

this与super比较

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little-peter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值