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