this
및
super
클래스와 해당 슈퍼클래스의 현재 인스턴스를 각각 나타내는 Java의 두 가지 특수 키워드입니다. Java 프로그래머는 종종 이러한 단어를 혼동하고 Java Core 인터뷰에서 자주 질문되는 특수 속성에 대해 거의 인식하지 못합니다. 예를 들어, 즉시 떠오르는 몇 가지 질문은
this
및 , Java에서
super
키워드에 다른 의미를 할당하는 것이 가능합니까 ? 키워드 와 Java의
this
차이점은 무엇입니까 ? 모른다? 글쎄, 여기서 답을 제시하는 것은 아닙니다. 기사 끝 부분에서 찾을 수 있습니다. 따라서 처음에 말했듯이 Java 와 Java의 주요 차이점 은 클래스의 현재 인스턴스가 표시되고 상위 클래스의 현재 인스턴스가 표시된다는 것입니다. 다음은 변수 를 사용하는 한 가지 예입니다 . 소위 생성자를 호출하는 예를 이미 본 적이 있을 것입니다. 체인에서 생성자를 호출하는 것은 키워드 및 를 사용하여 가능합니다 . 클래스 내부에서는 인수 없는 생성자를 호출하는 데 사용되며 , 인수 없는 생성자를 호출하는 데 사용되거나 부모 클래스의 기본 생성자라고도 합니다. 그런데 이 방법을 사용하면 인수 없이 생성자뿐만 아니라 적절한 매개변수를 전달하여 다른 생성자도 호출할 수 있습니다. 우리는 곧 이 사용법 의 예를 보게 될 것입니다 . 또한 Java 에서는 클래스 인스턴스와 해당 부모의 변수에 액세스하는 데 사용됩니다. 실제로 접두사 및 없이 액세스할 수 있지만 현재 블록에서 해당 변수가 다른 변수와 겹치지 않는 경우에만 액세스할 수 있습니다. 동일한 이름을 가진 지역 변수가 포함되어 있지 않으면 접두사가 있는 이름을 사용해야 하지만 이는 중요하지 않습니다. 이 형식에서는 훨씬 더 읽기 쉽습니다. 이 접근 방식의 전형적인 예는 인스턴스 변수와 동일한 이름의 매개 변수를 사용하는 생성자 내에서 이를 사용하는 것입니다. 이 기사의 뒷부분에서 와 사이에 다른 차이점이 무엇인지 알아보고 몇 가지 사용 예를 살펴보겠습니다.
this
super
this
super
this
super
this
super
this
super
this()
super()
this
super
this
super
super
this
this
super
this
this와 super의 유사점
this
키워드 와 의 차이점을 살펴보기 전에
super
몇 가지 유사점을 살펴보겠습니다.
this
, 및 모두 super
비정적 변수이므로 정적 컨텍스트에서 사용할 수 없습니다. 즉, 기본 메서드에서 사용할 수 없습니다. this
이로 인해 " 정적 컨텍스트에서 비정적 변수를 참조할 수 없습니다."라는 컴파일 타임 오류가 발생합니다 . 기본 메소드에서 키워드를 사용하는 경우에도 동일한 일이 발생합니다 super
.
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("");
System.out.println("Конструктор без аргументов класса B");
}
B(String args){
super("");
System.out.println("Конструктор с одним аргументом класса B");
}
}
public class Test {
public static void main(String args[]) {
B b = new B();
}
}
출력: 클래스 A의 단일 인수 생성자 클래스 B의 단일 인수 생성자 클래스 B의 인수 없는 생성자
- 생성자 내에서
this
및 는 super
다른 모든 표현식 위에 맨 처음에 나타나야 합니다. 그렇지 않으면 컴파일러에서 오류 메시지가 표시됩니다. 따라서 하나의 생성자에는 this()
, 및 가 모두 포함될 수 없습니다 super()
.
슈퍼와 이것의 차이점
이제 우리는 키워드를 사용하는 방법
super
과
this
키워드가 필요한 것이 무엇인지 이해했습니다. 그러나 내가 언급하지 않은 이러한 키워드를 사용하는 또 다른 옵션이 있습니다. 내부 클래스에는 이러한 키워드를 사용하여 Outer 표기법 형식을 사용하여 외부 클래스를 참조하는 것이 매우 편리합니다.
this
현재 인스턴스와 외부에 대해.
super
- 그의 부모님을 위해. Outer를 외부 클래스의 이름으로 바꾸는 것을 잊지 마십시오.
this
이제 키워드 와 키워드의 주요 차이점을 간략하게 나열하겠습니다.
super
- 변수는 변수
this
가 사용되는 클래스의 현재 인스턴스를 참조하는 반면 super
상위 클래스의 현재 인스턴스를 참조합니다.
- 각 생성자는 다른 생성자를 명시적으로 호출하지 않는 경우
super()
상위 클래스의 인수가 없는 생성자를 암시적으로 호출하지만 항상 또는 this()
또는 를 사용하여 다른 생성자를 명시적으로 호출할 수 있는 옵션이 있습니다 super()
.
this
이것이 아마도 키워드 와 Java 의 차이점
super
및 프로그램에서 사용되는 방식에 대해 말할 수 있는 전부일 것입니다. 우리가 본 것처럼 이들의 주요 목적은 하나의 생성자를 다른 생성자에서 호출하고 현재 클래스와 해당 부모 클래스에 선언된 인스턴스 변수를 참조하는 것입니다. 이것이 정확히 일반적인 변수가 아니라는 점을 잊지 마십시오. 이제 첫 번째 단락에서 물었던 내 질문에 대한 답변입니다. 아니요, 변수는
this
final로 선언되었기 때문에 새 값을 할당할 수 없습니다. IDE에서 이 작업을 시도할 수 있습니다. "변수에 새 값을 할당할 수 없습니다. 변수
this
가 최종으로 선언되었습니다."라는 컴파일 오류가 표시됩니다.
원본 기사는 여기에 있습니다 .
GO TO FULL VERSION