文章目录
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调用父类中指定操作:
- super可用于访问父类中定义的属性,protected,public,defuat
- super可用于调用父类中定义的成员方法
- 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比较