하위 클래스(자식 클래스)가 상위 클래스에 선언된 것과 동일한 메소드를 갖는 경우 이를 다음과 같이 부릅니다. Java의 메소드 재정의 .
즉, 하위 클래스가 상위 클래스 중 하나에 의해 선언된 메서드의 특정 구현을 제공하는 경우 이를 메서드 재정의라고 합니다.
Java 메소드 재정의 사용
- 메소드 오버라이딩은 슈퍼클래스에서 이미 제공하는 메소드의 특정 구현을 제공하는 데 사용됩니다.
- 메소드 재정의는 런타임 다형성에 사용됩니다.
Java 메소드 재정의 규칙
- 메소드는 상위 클래스의 이름과 동일해야 합니다.
- 메서드에는 상위 클래스와 동일한 매개 변수가 있어야 합니다.
- IS-A 관계(상속)가 있어야 합니다.
메서드 재정의 없이 문제 이해
메서드 재정의를 사용하지 않을 경우 프로그램에서 직면할 수 있는 문제를 이해해 보겠습니다.
//Java Program to demonstrate why we need method overriding //Here, we are calling the method of parent class with child //class object. //Creating a parent class class Vehicle{ void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike extends Vehicle{ public static void main(String args[]){ //creating an instance of child class Bike obj = new Bike(); //calling the method with child class instance obj.run(); } }지금 테스트해보세요
산출:
Vehicle is running
문제는 하위 클래스에서 run() 메서드의 특정 구현을 제공해야 한다는 것입니다. 이것이 우리가 메서드 재정의를 사용하는 이유입니다.
메서드 재정의의 예
이 예에서는 상위 클래스에 정의된 대로 하위 클래스의 run 메소드를 정의했지만 여기에는 몇 가지 특정 구현이 있습니다. 메소드의 이름과 매개변수가 동일하고, 클래스간 IS-A 관계가 있으므로 메소드 오버라이딩이 존재한다.
//Java Program to illustrate the use of Java Method Overriding //Creating a parent class. class Vehicle{ //defining a method void run(){System.out.println('Vehicle is running');} } //Creating a child class class Bike2 extends Vehicle{ //defining the same method as in the parent class void run(){System.out.println('Bike is running safely');} public static void main(String args[]){ Bike2 obj = new Bike2();//creating object obj.run();//calling method } }지금 테스트해보세요
산출:
Bike is running safely
Java 메소드 재정의의 실제 예
Bank가 이자율을 가져오는 기능을 제공하는 클래스인 시나리오를 생각해 보세요. 다만, 은행별로 이자율이 다릅니다. 예를 들어 SBI, ICICI 및 AXIS 은행은 8%, 7%, 9% 이자율을 제공할 수 있습니다.
Java 메서드 재정의는 주로 다음 페이지에서 배우게 될 런타임 다형성에서 사용됩니다.
//Java Program to demonstrate the real scenario of Java Method Overriding //where three classes are overriding the method of a parent class. //Creating a parent class. class Bank{ int getRateOfInterest(){return 0;} } //Creating child classes. class SBI extends Bank{ int getRateOfInterest(){return 8;} } class ICICI extends Bank{ int getRateOfInterest(){return 7;} } class AXIS extends Bank{ int getRateOfInterest(){return 9;} } //Test class to create objects and call the methods class Test2{ public static void main(String args[]){ SBI s=new SBI(); ICICI i=new ICICI(); AXIS a=new AXIS(); System.out.println('SBI Rate of Interest: '+s.getRateOfInterest()); System.out.println('ICICI Rate of Interest: '+i.getRateOfInterest()); System.out.println('AXIS Rate of Interest: '+a.getRateOfInterest()); } }지금 테스트해보세요
Output: SBI Rate of Interest: 8 ICICI Rate of Interest: 7 AXIS Rate of Interest: 9
정적 메서드를 재정의할 수 있나요?
아니요, 정적 메서드는 재정의될 수 없습니다. 런타임 다형성으로 증명할 수 있으므로 나중에 배우도록 하겠습니다.
정적 메서드를 재정의할 수 없는 이유는 무엇입니까?
이는 정적 메서드가 클래스와 바인딩되는 반면 인스턴스 메서드는 개체와 바인딩되기 때문입니다. Static은 클래스 영역에 속하고, 인스턴스는 힙 영역에 속합니다.
자바 메인 메소드를 오버라이드할 수 있나요?
아니요, 기본 메서드는 정적 메서드이기 때문입니다.
Java의 메소드 오버로딩과 메소드 오버라이딩의 차이점
메소드 오버로딩과 오버라이딩의 차이점을 보려면 나를 클릭하십시오.
메서드 재정의에 대한 추가 주제(초보자용 아님)
액세스 수정자를 사용한 메서드 재정의액세스 수정자를 사용한 메서드 재정의의 개념을 살펴보겠습니다.
메서드 재정의를 통한 예외 처리예외 처리를 통해 메서드 재정의의 개념을 살펴보겠습니다.