Java의 정적 메서드 재정의 및 오버로드
이 문서에서는 Java에서 정적 메서드를 재정의하고 오버로드할 수 있는지 여부에 대해 설명합니다. 그러나 더 진행하기 전에 다음과 같은 몇 가지 핵심 사항에 대해 명확히 하도록 하겠습니다.
Java의 객체 지향 특성은 재정의 및 오버로딩을 중요한 기능으로 만듭니다. 프로그래머가 다재다능함을 필요로 할 때 이 기능을 활용할 수 있습니다.
메소드 오버로딩
정적 다형성이라고도 하는 컴파일 타임 다형성은 Java와 같은 객체 지향 프로그래밍 언어의 또 다른 특성인 오버로드와 밀접하게 연결되어 있습니다. 이 기능을 사용하면 많은 메서드가 고유한 서명을 가지면서 동일한 이름을 가질 수 있습니다.
이러한 서명은 입력 인수의 수와 입력 매개변수의 종류를 포함하여 다양한 방식으로 달라질 수 있습니다.
정적 방법
정적 메서드는 static
키워드로 시작하는 메서드입니다. 클래스 수준 메서드는 이 개념의 또 다른 이름입니다.
정적
기능은 표준 구현을 통해 모든 클래스 인스턴스에서 사용할 수 있습니다.
메서드 재정의
재정의는 런타임에 다형성을 용이하게 하는 Java와 같은 객체 지향 프로그래밍 언어의 기능입니다. 슈퍼클래스에서 정의된 메소드는 종종 서브클래스나 파생 클래스에서 구현됩니다.
호출 개체는 런타임에 수행할 구현을 결정합니다. 두 메서드의 서명이 동일해야 한다는 점을 기억하는 것이 중요합니다.
메소드 오버로딩과 오버라이딩에 대한 설명이 끝나면 Java에서 정적 메소드를 오버라이드하거나 오버라이딩하는 것이 가능한지 여부에 대해 이야기하겠습니다.
Java에서 정적 메서드 오버로드
예, 정적 메서드를 오버로드할 수 있습니다. 그러나 메서드 서명이 고유해야 한다는 점을 기억하는 것이 중요합니다. 그렇지 않으면 이름은 같지만 입력 매개 변수는 서로 다른 두 개 이상의 정적 메서드가 있을 수 있습니다.
이 개념을 더 잘 이해하려면 다음 예를 고려하십시오.
-
아래 예에서는 다음과 같은 두 가지 정적 메서드를 만들었습니다.
public static void A() {} public static void Z(int b) {}
-
그런 다음, 다음과 같이 호출 시 표시할 일부 데이터로 이러한 메서드를 채웠습니다.
public static void A() { System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. "); }
-
마지막으로
main()
메서드에서 두 메서드를 모두 호출하여 오버로드합니다.public static void main(String args[]) { Shani.A(); Shani.Z(2); }
완전한 코드:
public class Shani {
public static void A() {
System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. ");
}
public static void Z(int b) {
System.out.println(" Z(int b) method is called: Hello, Programmers. ");
}
public static void main(String args[]) {
Shani.A();
Shani.Z(2);
}
}
main()
메서드를 호출하여 메서드를 오버로드하면 아래와 같은 결과가 표시됩니다.
A() method is called: Hi, Muhammad Zeeshan here.
Z(int b) method is called: Hello, Programmers.
Java에서 정적 메서드 재정의
정적 메서드는 컴파일 타임에 정적 바인딩을 사용하여 결합됩니다. 메서드 재정의는 런타임에 동적 바인딩을 전제로 하고 정적 메서드는 이미 런타임에 동적 바인딩을 사용하여 바인딩되기 때문에 메서드를 재정의할 수 없는 이유입니다.
따라서 정적 메서드를 재정의할 수 없습니다.
이해를 돕기 위해 다음 예를 살펴보겠습니다.
- 아래의
Tree
및Root
클래스는 둘 다 동일한 메서드 시그니처인Show()
라는 정적 메서드를 가집니다.Root
의 숨겨진 메서드는 기본 클래스의 원래 함수를 포함합니다. Root
클래스의 개체에서 정적 메서드를 호출하면Root
클래스의 정적 메서드가 호출됩니다.main()
메소드에서Tree
클래스의 객체를 전달하여 정적 메소드를 호출하면 아래 예제에서 볼 수 있듯이 원래 정적 메소드가 호출됩니다.
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
완전한 코드:
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
class Tree {
public static void Show() {
System.out.println(" Show() method of the *Tree* class ");
}
}
class Root extends Tree {
public static void Show() {
System.out.println(" Overridden static method in *Root* class in Java ");
}
}
출력:
Show() method of the *Tree* class
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn