Java에서 @Override
이 가이드에서는 Java의 @override
주석 및 재정의 주제에 대해 자세히 알아 봅니다. 재정의는 자식 클래스가 부모 클래스와 동일한 메서드를 갖는 개념입니다. 이 개념은 런타임 다형성의 예입니다.
Java에서 오버로딩과 오버로딩의 차이점
재정의는 종종 오버로딩이라는 또 다른 유사한 용어와 혼동됩니다. 더 진행하기 전에 다음 표에서 이들 간의 중요한 차이점을 살펴 보겠습니다.
메서드 재정의 | 메서드 오버로딩 |
---|---|
메서드는 이름과 서명이 동일해야합니다. | 메서드는 이름은 같지만 서명이 달라야합니다. |
런타임 다형성의 예입니다. | 컴파일 타임 다형성의 예입니다. |
모든 메소드의 반환 유형은 동일해야합니다. | 반환 유형은 같을 수도 있고 같지 않을 수도 있습니다. |
두 개 이상의 클래스간에 재정의가 발생합니다. | 같은 클래스에서 오버로딩이 발생합니다. |
매개 변수는 동일해야합니다. | 매개 변수는 달라야합니다. |
Java의@Override
주석
@Override
주석은 Java 컴파일러에게 수퍼 클래스의 메소드를 대체하려고 함을 알려줍니다. 프로세스에 구현할 때마다@Override
를 사용할 필요는 없지만 메서드를 만들 때 실수를 할 수 있으므로 사용하는 것이 좋습니다. 예를 들어 자식 클래스에 다른 매개 변수를 제공하여 재정의하는 대신 오버로딩 할 수 있습니다.
실수를 극복하기 위해 컴파일러에게 메서드를 재정의 할 것임을 알려주는 자식 클래스의 메서드 이름 위에@Override
를 사용합니다. 실수하면 컴파일러에서 오류가 발생합니다.
아래 예에는 4 개의 클래스가 있습니다. OverrideJava
클래스는main()
메소드가있는 곳이며 다른 클래스의 메소드가 해당 객체를 사용하여 호출되는 곳입니다. 그런 다음FirstClass
에 인쇄 메시지가있는method1()
이라는 메서드가있는 세 개의 다른 클래스가 있습니다. 마지막으로SecondClass
클래스는 상속 개념을 사용하는FirstClass
를 확장합니다. 여기서는FirstClass
와 같은 상위 클래스와 동일한 메소드 이름과 서명method1()
을 사용합니다.
SecondClass
클래스에서@Override
주석을 사용합니다. 다음으로ThirdClass
클래스에서SecondClass
를 확장하고 주석과 함께method1()
메소드를 사용합니다. 어떤 메서드가 호출되는지 확인하기 위해 자식 클래스 인ThirdClass
의 객체를 만들고method1()
을 호출합니다. 출력에서ThirdClass
내부 메소드가 호출되는 것을 관찰합니다. 이는 하위가 상위 이후 내부 구현을 변경했기 때문입니다.
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
출력:
Overriding method1 in Third Class
자식 클래스 대신 부모 클래스의method1()
을 호출하려면 수퍼 클래스의method1()
을 호출하는super.method1()
을 사용할 수 있습니다. 출력은 먼저ThirdClass
내부에서SecondClass의
메소드 인 상위 클래스가 호출 된 다음 자체 구현이 호출됨을 보여줍니다.
public class OverrideJava {
public static void main(String[] args) {
ThirdClass thirdClass = new ThirdClass();
thirdClass.method1();
}
}
class ThirdClass extends SecondClass {
@Override
void method1() {
super.method1();
System.out.println("Overriding method1 in Third Class");
}
}
class SecondClass extends FirstClass {
@Override
void method1() {
System.out.println("Overriding method1 in Second Class");
}
}
class FirstClass {
void method1() {
System.out.println("This is method1");
}
}
출력:
Overriding method1 in Second Class
Overriding method1 in Third Class
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn