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关键字。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)