如何在java中理解super

Ric*_*hen 0 java properties super

我遇到了一个困扰我的问题,它是关键字'super',我的测试代码是这样的:

package test;

public class Parent {
   private String name;

   public Parent(){
        this.name = "parent";      
   }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void showName(){
        System.out.println(this.name);
    }

}


public class Child extends Parent{

    public Child(){
        this.setName("Child");
    }

    public void showName(){
        System.out.println(super.getClass().toString());
        System.out.println(super.toString());

        super.showName();
        System.out.println(super.getName());
    }
}

public class Test {

    public static void main(String[] args) {
        Child d = new Child();
        d.showName();    
    }
}
Run Code Online (Sandbox Code Playgroud)

所以结果是这样的:

class test.Child
test.Child@2207d8bb
Child
Child
Run Code Online (Sandbox Code Playgroud)

我对'super'的理解是它是对当前实例的父实例的引用,所以我期望的输出就像'Parent',从结果来看,我错了,就像当前实例调用父方法一样,' super'不是父实例,是我的理解对吗?有没有办法让我只能初始化Child类的父实例?

Jon*_*eet 7

我对'super'的理解是它是对当前实例的父实例的引用

不 - 没有"父实例"这样的东西.创建实例时,只创建了一个对象 - 一个实例Child,它也继承了所有的字段和方法Parent.

super 有两种使用方式:

  • 要引用方法的超类实现,通常是在重写子类中的方法时.这是你在做什么Child.showName-它的呼唤Parent.showName,但在相同的情况下(因为只有一个实例)
  • 从子类构造函数中调用超类构造函数