super和this

作者: 让我做大哥 | 来源:发表于2019-01-17 10:09 被阅读0次
  • super关键字: 用来实现对父类成员的访问,引用当前对象的父类
  • this关键字: 用来指向自己的访问
class Animal {
  void eat() {
    System.out.println("animal : eat");
  }
}
 
class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}
 
public class Test {
  public static void main(String[] args) {
    Animal a = new Animal();
    a.eat();
    Dog d = new Dog();
    d.eatTest();
  }
}

--输出结果为:

animal : eat
dog : eat
animal : eat

super的继承问题

  • 子类不继承父类的构造器,会隐式或者显示的调用。
  • 当父类构造器有参数时,则在子类中必须以显示的super关键字来调用并配以适当的参数列表才能调用父类方法
  • 当父类存在无参构造器时,子类每个构造器不需要用super关键字,系统会自动调用父类的无参构造
    --eg:
class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
class SubClass extends SuperClass{
  private int n;
  
  SubClass(){
    super(300);
    System.out.println("SubClass");
  }  
  
  public SubClass(int n){
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    SubClass sc = new SubClass();
    SubClass sc2 = new SubClass(200); 
  }
}

--输出结果:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

以上SuperClass()是系统自动调用父类的无参构造


相关文章

网友评论

    本文标题:super和this

    本文链接:https://www.haomeiwen.com/subject/qnmbdqtx.html