super 키워드 는 다양한 상황에서 사용됩니다. 이 게시물을 시작하기 전에 더 나은 이해를 위해 Java의 상속에 대해 알아보는 것이 좋습니다.
Java의 super 키워드는 무엇입니까?
Super 는 슈퍼클래스의 재정의된 메서드를 호출하고 슈퍼클래스의 숨겨진 필드를 참조하는 데 사용할 수 있는 키워드입니다.super 키워드를 사용하는 이유와 시기는?
Java super 키워드에는 세 가지 명시적 용도가 있습니다.- 자식 클래스에도 같은 이름의 데이터 멤버가 있는 경우 부모 클래스의 데이터 멤버에 액세스합니다 .
- 자식 클래스에서 부모 클래스의 기본 생성자 또는 매개 변수가 있는 생성자를 호출합니다 .
- 자식 클래스에 재정의된 메서드가 있는 경우 자식 클래스에서 부모 클래스 메서드를 호출합니다 .
예 1 - 부모의 데이터 멤버에 액세스
예제 1은 Car 유형 자식 클래스에서 Vehicle 클래스 의 속성 또는 데이터 멤버에 액세스할 수 있는 방법을 보여줍니다 . 잘 이해하려면 아래 스니펫을 실행하세요.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
산출
내 차 이름: car 내 부모 차량 이름: vehicle
예 2 - 자식 클래스에서 부모의 생성자에 액세스
명시적으로 super()를 호출하면 자식 클래스에서 부모 클래스의 기본 생성자나 매개 변수가 있는 생성자 모두에 액세스할 수 있습니다. 다음은 매개변수화된 생성자의 예입니다. 부모 즉 Shape 클래스의 생성자는 특성을 설정하기 위해 자식 즉 Triangle 클래스에서 호출됩니다( super() 사용). 아래 프로그램을 실행하여 출력을 직접 테스트하십시오.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
산출
Shape() 매개변수화된 생성자가 호출되었습니다! Triangle() 매개변수화된 생성자가 호출되었습니다! 트라이앵글 알파 옐로우
빠른 챌린지 : 학습을 테스트하기 위해 기본 생성자를 사용하여 위의 프로그램을 재설계합니다. 또한 super() 가 super(arg) 와 어떻게 다른지 확인하십시오 .
예 3 - 자식 클래스에서 부모의 재정의된 메서드에 액세스
예제 3은 자식 클래스도 정의하는 부모 클래스의 메서드에 액세스하는 방법을 보여줍니다. 아래 프로그램의 부모 클래스 Sound는 voice() 메서드를 정의합니다 . 하위 클래스인 Drum 에도 같은 이름의 메서드가 있습니다. 예를 들어 voice() 입니다 . 메서드 음성이 하위 클래스에 의해 재정의됨을 의미합니다. 자식 클래스에서 부모 클래스의 메서드를 사용하기 위해 super 키워드가 어떻게 필요한지 알아보려면 아래 프로그램을 실행하십시오 .
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
산출
Shape() 매개변수화된 생성자가 호출되었습니다! Triangle() 매개변수화된 생성자가 호출되었습니다! 트라이앵글 알파 옐로우
GO TO FULL VERSION