>Java >java지도 시간 >Java에서 super 키워드 사용에 대한 자세한 설명

Java에서 super 키워드 사용에 대한 자세한 설명

黄舟
黄舟원래의
2017-10-14 09:35:071942검색

이 글은 주로 Java 슈퍼 키워드의 세부 사용에 대한 관련 정보를 소개합니다. 이 글이 모든 사람에게 슈퍼 키워드를 철저히 이해할 수 있도록 도움이 되기를 바랍니다. 키워드

Java 하위 클래스의 생성자에서 super 키워드를 사용하여 상위 클래스의 생성자를 호출할 수 있습니다. 사용법은 다음과 같습니다.

1) super(); 상위 클래스의 매개변수 없는 생성자에 액세스

2) super (paras…) 상위 클래스의 멤버 함수 yyy에 액세스하여

super(); parent 클래스에는 매개변수 없는 생성자가 있지만, super()를 사용하지 않더라도 기본적으로 부모 클래스의 매개변수 없는 생성자가 호출됩니다. 부모 클래스의 매개 변수 없는 생성자는 사용자 지정 매개 변수 없는 생성자이거나 컴파일러에서 자동으로 생성된 기본 생성자일 수 있습니다. 그러나 부모 클래스에 매개변수화된 생성자가 정의되어 있지만 매개변수 없는 생성자가 정의되지 않은 경우 컴파일러는 기본 생성자를 생성하지 않으며 super()를 통해 생성자를 호출할 수 없습니다. 또한, 부모 클래스에 인수 없는 전용 생성자가 정의된 경우 super()를 통해 호출할 수 없습니다.

super(paras…);는 상위 클래스에서 매개변수화된 생성자를 호출하는 데 사용됩니다.

super는 상위 클래스의 생성자를 호출하며 하위 클래스 생성자의 첫 번째 줄에서 실행되어야 합니다. 매개변수가 있는 상위 클래스 생성자가 호출되면 하위 클래스의 비정적 멤버 변수를 슈퍼 매개변수에 사용할 수 없습니다(정적 멤버 변수는 생성자가 실행되기 전에 초기화되었으므로 정적 멤버 변수를 사용할 수 있음). this 또는 super에 대한 관련 호출을 사용하십시오. 예를 들어 super(super.getClass().getName());

생성자에서 super 키워드를 사용하여 상위 클래스의 멤버 변수 및 멤버 함수에 액세스할 수도 있습니다. 사용법은 생성자가 아닌 메소드의 super 키워드 사용법과 동일합니다.

생성자가 아닌 메서드의 super 키워드

Java 하위 클래스에서는 super 키워드를 사용하여 상위 클래스의 멤버 변수와 메서드를 호출할 수 있습니다. 사용법은 다음과 같습니다.

1) super.xxx; 상위 클래스의 멤버 변수 xxx에 액세스
2) super.yyy(paras…) 상위 클래스의 멤버 함수 yyy에 액세스


super 키워드는 멤버 변수와 멤버에 액세스 함수는 액세스 제어를 초과할 수 없으며 상위 클래스의 전용 멤버 변수 및 메서드에 액세스할 수 없습니다. 예를 들면 다음과 같습니다.

class a {
  private int mNum = 0;
}
class b extends a {
  public void setNum(int i) {
    super.mNum = i;   //错误,不能访问父类的private成员
  }
}

여러 수준의 상속 관계가 있는 경우 super는 자신의 부모 클래스의 멤버 변수와 메서드만 호출할 수 있으며, 부모 클래스를 넘어 부모 클래스의 부모 클래스의 멤버 변수나 메서드를 직접 호출할 수는 없습니다. . 물론, 부모 클래스의 부모 클래스에 있는 멤버 변수나 메소드가 부모 클래스에 상속된 경우에는 super를 통해 멤버 변수와 메소드를 호출할 수 있지만, 이때 부모 클래스에 있는 멤버 변수와 메소드는 실제로 전화했습니다. 예:

class a {
  protected int mNum = 0;
  public void setNum(int i) {
    mNum = i;
  }
}
class b extends a {
  public void setNum(int i) {
    mNum = i * i;
  }
}
class c extends b {
  public void setNum(int i) {
    super.setNum(i);    //调用的是b中的setNum()方法
    super.super.setNum(i); //错误,不支持的用法
  }
}


class a {
  protected int mNum = 0;
  public void setNum(int i) {
    mNum = i;
  }
}
class b extends a {
}
class c extends b {
  public void setNum(int i) {
    super.setNum(i);  //正确,虽然b中没有实现setNum(),但b中继承了a的setNum()函数,
              //c中调用super.setNum()调用的是b的setNum()函数,可以执行。
  }
}

위 내용은 Java에서 super 키워드 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.