java
이 자습서에서는 예제를 통해 Java의 메서드 재정의에 대해 배웁니다.
지난 튜토리얼에서 상속에 대해 배웠습니다. 상속은 기존 클래스(수퍼클래스)에서 새 클래스(서브클래스)를 파생할 수 있게 해주는 OOP 속성입니다. 하위 클래스는 상위 클래스의 속성과 메서드를 상속합니다.
이제 동일한 메서드가 슈퍼클래스와 서브클래스 모두에 정의되어 있으면 서브클래스 클래스의 메서드가 슈퍼클래스의 메서드를 재정의합니다. 이를 메서드 재정의라고 합니다.
<시간>
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
출력 :
I am a dog.
위 프로그램에서 displayInfo()
메소드는 Animal 슈퍼클래스와 개 하위 클래스.
displayInfo()
를 호출할 때 d1 사용 개체(하위 클래스의 개체), 하위 클래스 Dog 내부의 메서드 라고 합니다. displayInfo()
하위 클래스의 메서드가 슈퍼 클래스의 동일한 메서드를 재정의합니다.
@Override
사용에 주의하세요. 우리의 예에서 주석. Java에서 주석은 컴파일러에 정보를 제공하는 데 사용한 메타데이터입니다. 여기서 @Override
주석은 이 주석 뒤의 메소드가 수퍼클래스의 메소드를 재정의하는 컴파일러를 지정합니다.
@Override
를 반드시 사용해야 하는 것은 아닙니다. . 그러나 이것을 사용할 때 메서드는 재정의의 모든 규칙을 따라야 합니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.
final
으로 선언된 메서드를 재정의할 수 없습니다. 및 static
.Java에서 재정의를 수행하는 동안 발생하는 일반적인 질문은 다음과 같습니다.
재정의 후 수퍼클래스의 메소드에 액세스할 수 있습니까?
답은 예입니다. . 하위 클래스에서 상위 클래스의 메서드에 액세스하려면 super
을 사용합니다. 키워드.
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
super.displayInfo();
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
출력 :
I am an animal. I am a dog.
위의 예에서 서브클래스 Dog displayInfo()
메서드를 재정의합니다. 슈퍼클래스 동물의 .
displayInfo()
메서드를 호출할 때 d1 사용 개의 개체 서브클래스, Dog 내부의 메소드 하위 클래스가 호출됩니다. 슈퍼클래스 내부의 메소드는 호출되지 않습니다.
displayInfo()
내부 개 하위 클래스에서는 super.displayInfo()
을 사용했습니다. displayInfo()
호출 슈퍼 클래스의.
Java의 생성자는 상속되지 않는다는 점에 유의하는 것이 중요합니다. 따라서 Java에는 생성자 재정의와 같은 것이 없습니다.
그러나 하위 클래스에서 상위 클래스의 생성자를 호출할 수 있습니다. 이를 위해 super()
를 사용합니다. . 자세한 내용은 Java 슈퍼 키워드를 참조하십시오.
슈퍼클래스와 그 서브클래스에서 선언된 동일한 메서드는 다른 액세스 지정자를 가질 수 있습니다. 단, 제한이 있습니다.
슈퍼클래스의 액세스 지정자보다 더 큰 액세스를 제공하는 서브클래스에서만 액세스 지정자를 사용할 수 있습니다. 예를 들어,
myClass()
메서드가 있다고 가정해 보겠습니다. 슈퍼 클래스에서 선언된 protected
. 그런 다음 동일한 방법 myClass()
하위 클래스에서 public
또는 protected
, 하지만 private
는 아님 .
class Animal {
protected void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
출력 :
I am a dog.
위의 예에서 서브클래스 Dog displayInfo()
메서드를 재정의합니다. 슈퍼클래스 동물의 .
displayInfo()
를 호출할 때마다 d1 사용 (서브클래스의 객체), 서브클래스 내부의 메소드가 호출됩니다.
displayInfo()
선언된 protected
동물에서 슈퍼클래스. 동일한 메소드에는 public
이 있습니다. Dog의 액세스 지정자 아강. public
protected
보다 더 큰 액세스를 제공합니다. .
Java에서 추상 클래스는 다른 클래스의 상위 클래스로 생성됩니다. 그리고 클래스에 추상 메서드가 포함된 경우 이를 재정의해야 합니다.
추상 클래스와 추상 메서드 재정의에 대한 자세한 내용은 이후 자습서에서 알아보겠습니다.
java
Java 메소드는 작업을 수행하기 위해 함께 그룹화되는 명령문의 모음입니다. System.out.println()을 호출할 때 예를 들어, 시스템은 콘솔에 메시지를 표시하기 위해 실제로 여러 명령문을 실행합니다. 이제 반환 값이 있거나 없는 고유한 메서드를 만들고 매개 변수가 있거나 없는 메서드를 호출하고 프로그램 디자인에서 메서드 추상화를 적용하는 방법을 배웁니다. 생성 방법 메소드의 구문을 설명하기 위해 다음 예를 고려하십시오 - 구문 public static int methodName(int a, int b) {
상속은 한 클래스가 다른 클래스의 속성(메서드 및 필드)을 획득하는 프로세스로 정의할 수 있습니다. 상속을 사용하면 정보를 계층적 순서로 관리할 수 있습니다. 다른 사람의 속성을 상속하는 클래스를 하위 클래스(파생 클래스, 자식 클래스)라고 하고 속성을 상속받는 클래스를 슈퍼 클래스(기본 클래스, 부모 클래스)라고 합니다. 확장 키워드 확장 클래스의 속성을 상속하는 데 사용되는 키워드입니다. 다음은 extends 키워드의 구문입니다. 구문 class Super { ..... ..... } class Sub ext