java
이 튜토리얼에서는 예제를 통해 Java의 super 키워드에 대해 배웁니다.
super
Java의 키워드는 서브클래스에서 슈퍼클래스 멤버(속성, 생성자 및 메소드)에 액세스하는 데 사용됩니다.
super
에 대해 알아보기 전에 키워드, Java 상속에 대해 알아야 합니다.
각각의 용도를 이해합시다.
<시간>동일한 이름을 가진 메서드가 슈퍼클래스와 서브클래스 모두에 정의되어 있으면 서브클래스의 메서드가 슈퍼클래스의 메서드를 재정의합니다. 이를 메서드 재정의라고 합니다.
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
출력
I am a dog
이 예에서는 개체를 dog1 개의 클래스에서 printMessage() 메서드를 호출할 수 있습니다. 그런 다음 display()
을 실행합니다. 성명서.
display()
이후 두 클래스 모두에서 정의되며 하위 클래스 Dog의 메서드입니다. 슈퍼클래스 Animal의 메서드를 재정의합니다. . 따라서 display()
하위 클래스가 호출됩니다.
슈퍼클래스의 재정의된 메서드를 호출해야 하는 경우 어떻게 됩니까?
super.display()
를 사용합니다. 재정의된 메서드 display()
인 경우 슈퍼클래스 동물 호출해야 합니다.
class Animal {
// overridden method
public void display(){
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// overriding method
@Override
public void display(){
System.out.println("I am a dog");
}
public void printMessage(){
// this calls overriding method
display();
// this calls overridden method
super.display();
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printMessage();
}
}
출력
I am a dog I am an animal
위의 프로그램이 작동하는 방식은 다음과 같습니다.
<시간>
슈퍼클래스와 서브클래스는 같은 이름의 속성을 가질 수 있습니다. super
를 사용합니다. 슈퍼클래스의 속성에 접근하기 위한 키워드.
class Animal {
protected String type="animal";
}
class Dog extends Animal {
public String type="mammal";
public void printType() {
System.out.println("I am a " + type);
System.out.println("I am an " + super.type);
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.printType();
}
}
출력 :
I am a mammal I am an animal
이 예에서는 동일한 인스턴스 필드 type을 정의했습니다. 슈퍼클래스 Animal 모두에서 및 하위 클래스 개 .
그런 다음 dog1 개체를 만들었습니다. 개 수업. 그런 다음 printType()
이 개체를 사용하여 메서드를 호출합니다.
printType()
내부 기능,
따라서 System.out.println("I am a " + type);
인쇄
나는 포유류입니다
. 그리고 System.out.println("I am an " + super.type);
나는 동물입니다
를 인쇄합니다. .
알다시피 클래스의 개체가 생성되면 기본 생성자가 자동으로 호출됩니다.
하위 클래스 생성자에서 상위 클래스 생성자를 명시적으로 호출하려면 super()
을 사용합니다. . super
의 특별한 형태입니다. 키워드.
super()
서브클래스 생성자 내에서만 사용할 수 있으며 첫 번째 명령문이어야 합니다.
class Animal {
// default or no-arg constructor of class Animal
Animal() {
System.out.println("I am an animal");
}
}
class Dog extends Animal {
// default or no-arg constructor of class Dog
Dog() {
// calling default constructor of the superclass
super();
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
출력
I am an animal I am a dog
여기서 dog1 개체가 개의 클래스가 생성되면 해당 클래스의 기본 생성자 또는 인수가 없는 생성자를 자동으로 호출합니다.
하위 클래스 생성자 내에서 super()
명령문은 슈퍼클래스의 생성자를 호출하고 그 안에 있는 명령문을 실행합니다. 따라서 우리는
I am animal
출력을 얻습니다. .
그런 다음 프로그램의 흐름은 하위 클래스 생성자로 다시 돌아가 나머지 명령문을 실행합니다. 따라서 나는 개입니다 인쇄됩니다.
그러나 super()
를 사용하면 의무 사항이 아닙니다. super()
하위 클래스 생성자에서 사용되지 않는 경우 컴파일러는 암시적으로 상위 클래스의 기본 생성자를 호출합니다.
그러면 컴파일러가 자동으로 super()를 호출하는 경우 중복 코드를 사용하는 이유는 무엇입니까?
매개변수화된 생성자(인수를 받는 생성자) 상위 클래스의 하위 클래스 생성자에서 호출해야 합니다.
매개변수화된 super()
항상 하위 클래스 생성자 본문의 첫 번째 명령문이어야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.
class Animal {
// default or no-arg constructor
Animal() {
System.out.println("I am an animal");
}
// parameterized constructor
Animal(String type) {
System.out.println("Type: "+type);
}
}
class Dog extends Animal {
// default constructor
Dog() {
// calling parameterized constructor of the superclass
super("Animal");
System.out.println("I am a dog");
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
}
}
출력
Type: Animal I am a dog
컴파일러는 인수가 없는 생성자를 자동으로 호출할 수 있습니다. 그러나 매개변수화된 생성자를 호출할 수 없습니다.
매개변수화된 생성자를 호출해야 하는 경우 하위 클래스 생성자에서 명시적으로 정의해야 합니다.
위의 예에서 우리는 명시적으로 매개변수화된 생성자를 super("Animal")
라고 불렀습니다. . 이 경우 컴파일러는 슈퍼클래스의 기본 생성자를 호출하지 않습니다.
java
자바 ArrayDeque 이 자습서에서는 예제를 통해 ArrayDeque 클래스와 해당 메서드에 대해 알아봅니다. 또한 배열 deque를 사용하여 스택을 구현하는 방법을 배웁니다. 자바에서는 ArrayDeque를 사용할 수 있습니다. 배열을 사용하여 queue 및 deque 데이터 구조를 구현하는 클래스입니다. ArrayDeque에 의해 구현된 인터페이스 ArrayDeque 클래스는 다음 두 인터페이스를 구현합니다. 자바 대기열 인터페이스 자바 데크 인터페이스 ArrayDeque 생성 배열 데크를 생성하려면 jav
자바 ArrayBlockingQueue 이 자습서에서는 예제를 통해 ArrayBlockingQueue 클래스와 해당 메서드에 대해 알아봅니다. ArrayBlockingQueue Java Collections 프레임워크의 클래스는 배열을 사용하여 차단 대기열 구현을 제공합니다. Java BlockingQueue 인터페이스를 구현합니다. ArrayBlockingQueue 생성 배열 차단 대기열을 생성하려면 java.util.concurrent.ArrayBlockingQueue를 가져와야 합니다. 패키지. 패키지를 가져온