JavaRush /Java Blog /Random-KO /Java의 this 키워드와 super 키워드의 차이점
grishin
레벨 27
Харьков

Java의 this 키워드와 super 키워드의 차이점

Random-KO 그룹에 게시되었습니다
thissuper클래스와 해당 슈퍼클래스의 현재 인스턴스를 각각 나타내는 Java의 두 가지 특수 키워드입니다. Java 프로그래머는 종종 이러한 단어를 혼동하고 Java Core 인터뷰에서 자주 질문되는 특수 속성에 대해 거의 인식하지 못합니다. 예를 들어, 즉시 떠오르는 몇 가지 질문은 this및 , Java에서 super키워드에 다른 의미를 할당하는 것이 가능합니까 ? 키워드 와 Java의 this차이점은 무엇입니까 ? 모른다? 글쎄, 여기서 답을 제시하는 것은 아닙니다. 기사 끝 부분에서 찾을 수 있습니다. 따라서 처음에 말했듯이 Java 와 Java의 주요 차이점 은 클래스의 현재 인스턴스가 표시되고 상위 클래스의 현재 인스턴스가 표시된다는 것입니다. 다음은 변수 를 사용하는 한 가지 예입니다 . 소위 생성자를 호출하는 예를 이미 본 적이 있을 것입니다. 체인에서 생성자를 호출하는 것은 키워드 및 를 사용하여 가능합니다 . 클래스 내부에서는 인수 없는 생성자를 호출하는 데 사용되며 , 인수 없는 생성자를 호출하는 데 사용되거나 부모 클래스의 기본 생성자라고도 합니다. 그런데 이 방법을 사용하면 인수 없이 생성자뿐만 아니라 적절한 매개변수를 전달하여 다른 생성자도 호출할 수 있습니다. 우리는 곧 이 사용법 의 예를 보게 될 것입니다 . 또한 Java 에서는 클래스 인스턴스와 해당 부모의 변수에 액세스하는 데 사용됩니다. 실제로 접두사 및 없이 액세스할 수 있지만 현재 블록에서 해당 변수가 다른 변수와 겹치지 않는 경우에만 액세스할 수 있습니다. 동일한 이름을 가진 지역 변수가 포함되어 있지 않으면 접두사가 있는 이름을 사용해야 하지만 이는 중요하지 않습니다. 이 형식에서는 훨씬 더 읽기 쉽습니다. 이 접근 방식의 전형적인 예는 인스턴스 변수와 동일한 이름의 매개 변수를 사용하는 생성자 내에서 이를 사용하는 것입니다. 이 기사의 뒷부분에서 와 사이에 다른 차이점이 무엇인지 알아보고 몇 가지 사용 예를 살펴보겠습니다. thissuperJava의 this 키워드와 super 키워드의 차이점 - 1thissuperthissuperthissuperthissuperthis()super()thissuperthissupersuperthisthissuperthis

this와 super의 유사점

this키워드 와 의 차이점을 살펴보기 전에 super몇 가지 유사점을 살펴보겠습니다.
  1. this, 및 모두 super비정적 변수이므로 정적 컨텍스트에서 사용할 수 없습니다. 즉, 기본 메서드에서 사용할 수 없습니다. this이로 인해 " 정적 컨텍스트에서 비정적 변수를 참조할 수 없습니다."라는 컴파일 타임 오류가 발생합니다 . 기본 메소드에서 키워드를 사용하는 경우에도 동일한 일이 발생합니다 super.

  2. this, 및 모두 super생성자 내부에서 체인의 다른 생성자를 호출하는 데 사용할 수 있습니다. 예를 들어 this() 및 super()는 각각 상속 클래스와 부모 클래스의 인수 없이 생성자를 호출합니다.
아래 예제에서는 먼저 클래스 B의 인수 없는 생성자에서 type 의 단일 매개 변수를 사용하는 동일한 클래스 B의 생성자에 호출을 전달합니다. String그러면 이 생성자는 차례로 super("")슈퍼 클래스에서 단일 인수 생성자를 호출합니다.
class A{

    A(){
        System.out.println("Конструктор без аргументов класса A");
    }

    A(String args){
        System.out.println("Конструктор с одним аргументом класса A");
    }
}

class B extends A{

   B(){
        this(""); // вызов конструктора с одним аргументом класса B
        System.out.println("Конструктор без аргументов класса B");
    }

   B(String args){
        super(""); // вызов конструктора с одним аргументом класса A
        System.out.println("Конструктор с одним аргументом класса B");
    }
}

// Тест-класс и вывод
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
출력: 클래스 A의 단일 인수 생성자 클래스 B의 단일 인수 생성자 클래스 B의 인수 없는 생성자
  1. 생성자 내에서 this및 는 super다른 모든 표현식 위에 맨 처음에 나타나야 합니다. 그렇지 않으면 컴파일러에서 오류 메시지가 표시됩니다. 따라서 하나의 생성자에는 this(), 및 가 모두 포함될 수 없습니다 super().

슈퍼와 이것의 차이점

이제 우리는 키워드를 사용하는 방법 superthis키워드가 필요한 것이 무엇인지 이해했습니다. 그러나 내가 언급하지 않은 이러한 키워드를 사용하는 또 다른 옵션이 있습니다. 내부 클래스에는 이러한 키워드를 사용하여 Outer 표기법 형식을 사용하여 외부 클래스를 참조하는 것이 매우 편리합니다. this현재 인스턴스와 외부에 대해. super- 그의 부모님을 위해. Outer를 외부 클래스의 이름으로 바꾸는 것을 잊지 마십시오. this이제 키워드 와 키워드의 주요 차이점을 간략하게 나열하겠습니다.super
  1. 변수는 변수 this가 사용되는 클래스의 현재 인스턴스를 참조하는 반면 super상위 클래스의 현재 인스턴스를 참조합니다.

  2. 각 생성자는 다른 생성자를 명시적으로 호출하지 않는 경우 super()상위 클래스의 인수가 없는 생성자를 암시적으로 호출하지만 항상 또는 this()또는 를 사용하여 다른 생성자를 명시적으로 호출할 수 있는 옵션이 있습니다 super().
this이것이 아마도 키워드 와 Java 의 차이점 super및 프로그램에서 사용되는 방식에 대해 말할 수 있는 전부일 것입니다. 우리가 본 것처럼 이들의 주요 목적은 하나의 생성자를 다른 생성자에서 호출하고 현재 클래스와 해당 부모 클래스에 선언된 인스턴스 변수를 참조하는 것입니다. 이것이 정확히 일반적인 변수가 아니라는 점을 잊지 마십시오. 이제 첫 번째 단락에서 물었던 내 질문에 대한 답변입니다. 아니요, 변수는 thisfinal로 선언되었기 때문에 새 값을 할당할 수 없습니다. IDE에서 이 작업을 시도할 수 있습니다. "변수에 새 값을 할당할 수 없습니다. 변수 this가 최종으로 선언되었습니다."라는 컴파일 오류가 표시됩니다. 원본 기사는 여기에 있습니다 .
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION