> Java > java지도 시간 > 본문

이에 대한 자세한 소개와 Java의 슈퍼 키워드

黄舟
풀어 주다: 2017-09-20 10:19:22
원래의
1660명이 탐색했습니다.

이 글은 Java에서 this와 super 키워드를 사용하는 방법에 대한 관련 정보를 주로 소개합니다. Java에서 this와 super의 적용을 완전히 이해하는 데 이 글이 도움이 되기를 바랍니다.

java 방법 this 및 super 키워드를 사용하는 방법

지난 며칠 동안 클래스에서 상속할 때 this 및 super를 사용하는 것을 보았습니다. 여기에 요약을 공유합니다. 혹시 실수가 있으면 수정해 주세요~

this

이것은 객체 자체를 나타내는 자체 객체입니다. 객체 자체에 대한 포인터로 이해될 수 있습니다.

this의 사용법은 Java에서 대략 세 가지 유형으로 나눌 수 있습니다.

1. 일반적인 직접 참조

말할 필요도 없이 현재 객체 자체를 가리키는 것과 같습니다.

2. 참여하는 멤버의 이름이 같은 경우 다음을 사용하여 구분하세요.


class Person {
  private int age = 10;
  public Person(){
  System.out.println("初始化年龄:"+age);
}
  public int GetAge(int age){
    this.age = age;
    return this.age;
  }
}

public class test1 {
  public static void main(String[] args) {
    Person Harry = new Person();
    System.out.println("Harry's age is "+Harry.GetAge(12));
  }
}
로그인 후 복사

실행 결과:


初始化年龄:10 
Harry's age is 12
로그인 후 복사

여기서 age가 GetAge 멤버의 공식 매개변수임을 알 수 있습니다. 메소드, this.age는 Person 클래스의 멤버 변수입니다.

3. 참조 생성자

이것은 super와 함께 논의됩니다. 아래를 참조하세요.

super

super는 자신의 슈퍼(부모) 클래스 객체에 대한 포인터로 이해될 수 있으며, 이 슈퍼 클래스는 자신과 가장 가까운 부모 클래스를 나타냅니다.

super에는 세 가지 용도도 있습니다.

1. 일반적인 직접 참조

이와 유사하게 super는 현재 객체의 상위 클래스를 가리키는 것과 동일하므로 super.xxx를 사용하여 상위 클래스의 멤버를 참조할 수 있습니다.

2. 하위 클래스의 멤버 변수 또는 메소드는 상위 클래스의 멤버 변수 또는 메소드와 이름이 동일합니다.


class Country {
  String name;
  void value() {
    name = "China";
  }
}

class City extends Country {
  String name;
  void value() {
  name = "Shanghai";
  super.value();   //调用父类的方法
  System.out.println(name);
  System.out.println(super.name);
  }

  public static void main(String[] args) {
    City c=new City();
    c.value();
    }
}
로그인 후 복사

작업 결과:


Shanghai 
China
로그인 후 복사

부모 클래스의 메소드를 볼 수 있습니다. 여기서는 클래스가 호출되며, 상위 클래스의 변수도 호출됩니다. 상위 클래스 메소드 value()를 호출하지 않고 상위 클래스 변수 이름만 호출하는 경우 상위 클래스 이름 값은 기본값인 null이 됩니다.

3. 참조 생성자

super(매개변수): 상위 클래스에서 특정 생성자를 호출합니다(생성자의 첫 번째 문이어야 함).

this(매개변수): 이 클래스에서 다른 형태의 생성자를 호출합니다(생성자의 첫 번째 문이어야 함).


class Person { 
  public static void prt(String s) { 
    System.out.println(s); 
  } 

  Person() { 
    prt("父类·无参数构造方法: "+"A Person."); 
  }//构造方法(1) 

  Person(String name) { 
    prt("父类·含一个参数的构造方法: "+"A person's name is " + name); 
  }//构造方法(2) 
} 
/**
 * Java学习交流QQ群:589809992 我们一起学Java!
 */  
public class Chinese extends Person { 
  Chinese() { 
    super(); // 调用父类构造方法(1) 
    prt("子类·调用父类”无参数构造方法“: "+"A chinese coder."); 
  } 

  Chinese(String name) { 
    super(name);// 调用父类具有相同形参的构造方法(2) 
    prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name); 
  } 

  Chinese(String name, int age) { 
    this(name);// 调用具有相同形参的构造方法(3) 
    prt("子类:调用子类具有相同形参的构造方法:his age is " + age); 
  } 

  public static void main(String[] args) { 
    Chinese cn = new Chinese(); 
    cn = new Chinese("codersai"); 
    cn = new Chinese("codersai", 18); 
  } 
}
로그인 후 복사

실행 결과:


父类·无参数构造方法: A Person. 
子类·调用父类”无参数构造方法“: A chinese coder. 
父类·含一个参数的构造方法: A person's name is codersai 
子类·调用父类”含一个参数的构造方法“: his name is codersai 
父类·含一个参数的构造方法: A person's name is codersai 
子类·调用父类”含一个参数的构造方法“: his name is codersai 
子类:调用子类具有相同形参的构造方法:his age is 18
로그인 후 복사

이 예에서 볼 수 있듯이 super 및 this를 사용하여 각각 상위 클래스의 생성자를 호출하고 이 클래스의 다른 형태의 생성자를 호출할 수 있습니다.

예제에서 중국어 클래스의 세 번째 생성 메서드는 이 클래스의 두 번째 생성 메서드를 호출하고, 두 번째 생성 메서드는 부모 클래스를 호출하므로 부모 클래스의 생성 메서드를 먼저 호출한 다음 이 클래스를 호출해야 합니다. 두 번째, 마지막으로 세 번째 생성 방법이 재정의됩니다.

super와 this의 유사점과 차이점:

  • super(매개변수): 기본 클래스에서 특정 생성자를 호출합니다(생성자의 첫 번째 문이어야 함)

  • this(매개변수): Another를 호출합니다. 이 클래스에서 형성된 생성자(생성자의 첫 번째 명령문이어야 함)

  • super: 현재 개체의 직계 부모 클래스에 있는 멤버를 참조합니다(직계 부모 클래스의 숨겨진 멤버에 액세스하는 데 사용됨) 멤버 데이터 또는 함수 상위 클래스에서 기본 클래스와 파생 클래스에 동일한 멤버 정의가 있는 경우: super.변수 이름 super.멤버 함수 데이터 이름(실제 매개변수)

  • this: 현재 개체 이름을 나타냅니다. (프로그램에서 모호성이 발생할 가능성이 있는 경우 현재 객체를 나타내는 데 사용해야 합니다. 클래스에 있는 함수의 공식 멤버 데이터가 동일한 이름을 갖는 경우 멤버 변수 이름을 나타내는 데 사용해야 합니다.)

  • super() 호출은 하위 클래스 생성자의 첫 번째 줄에 작성되어야 합니다. 그렇지 않으면 각 하위 클래스 생성자의 첫 번째 문이 암시적으로 super()를 호출합니다.

  • super()가 this()와 유사하면 오류가 보고됩니다. 차이점은 super()가 하위 클래스에서 상위 클래스의 생성자를 호출하고 this()가 다른 메서드를 호출한다는 것입니다. 동일한 클래스입니다. super()와 this()는 모두 생성자의 첫 번째 줄에 배치되어야 합니다.

  • 이를 사용하여 하나의 생성자를 호출할 수는 있지만

  • this와 super는 나타날 수 없습니다. 생성자에서는 필연적으로 다른 생성자를 호출하게 되고, 다른 생성자는 필연적으로 super 문을 갖게 되므로 동일한 생성자에 동일한 명령문이 있으면 해당 명령문의 의미가 상실됩니다.

  • this()와 super()는 모두 객체를 참조하므로 정적 변수, 정적 메서드, 정적 문 블록을 포함하여 사용할 수 없습니다.

  • 기본적으로 . 즉, 이것은 이 객체에 대한 포인터이지만 super는 Java 키워드

  • 입니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!