this关键字与super关键字含义及区别

this关键字与super关键字含义及区别,第1张

this关键字与super关键字含义及区别

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

    this . 属性 (区别成员变量和局部变量)this . () (调用本类的某个方法)this . () (调用本类构造方法,只能用在构造方法的第一行)this关键字只能出现在非static修饰的代码中
class Person { 
 private String name;//实例成员变量
 private int age; 
 private String sex; 
 
 //默认构造函数 构造对象
 public Person() { 
 //this调用构造函数
 this("小bit~", 22, "woman");//必须放在第一行进行显示
 } 
 
 //这两个构造函数之间的关系为重载。
 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: 22 sex: woman

super 关键字
如果需要在子类内部调用父类方法怎么办? 可以使用super 关键字。

    super 表示父类对象super . 属性 (表示父类对象中的成员变量)super . 方法(表好似调用父类构造方法)super只能用在构造方法的第一行

super 表示获取到父类实例的引用. 涉及到两种常见用法:

    使用了 super 来调用父类的构造器
public Bird(String name) { 
 super(name); 
}
    使用 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只带构造方法,则必须放在方法体第一行。即this和super在一个方法体中只能出现一个,并且只能出现一次,否则在实例化对象时,会因为子类调用多个构造方法而造成混乱。由于this和super都在实例化阶段调用,所以不能在静态方法和静态代码块中使用this和super关键字。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存