메소드 오버라이딩
부모클래스와 자식클래스가 상속관계일 때 자식클래스가 부모클래스에서 선언된 형태로 메소드명으로 구현하는 것이다.
Parents.java
package overriding;
public class ParentClass {
public ParentClass(){
System.out.println("ParentClass Constructor");
}
public void printName(){
System.out.println("ParentClass Name");
}
}
ChildClass.java
package overriding;
public class ChildClass extends ParentClass{
public ChildClass(){
System.out.println("ChildClass Constructor");
}
public void printName(){
System.out.println("ChildClass Name");
}
}
MainClass.java
package overriding;
public class MainClass {
public static void main(String[] args) {
ChildClass childClass = new ChildClass();
childClass.printName();
}
}
결과
ParentClass Constructor
ChildClass Constructor
ChildClass Name
여기서 ChildClass.java의 printName()메서드를 주석처리 한다면?
ParentClass Constructor
ChildClass Constructor
ParentClass Name
아래와 같은 결과가 도출된다.
메소드 오버로딩을 하기 위한 조건은 다음과 같다.
1. 메소드 이름이 동일해야 한다.
2. 매개변수와 타입이 동일해야 한다.
3. 리턴타입이 동일해야한다.
4. 메소드의 static 예약어를 붙이면 안된다.
오버라이딩을 사용하는 이유는.. 부모클래스에서 정의된 메소드를 재정의하고 싶을 때 사용한다.
메소드 오버로딩
클래스 내에서 동일한 메소드 명을 사용하더라도 매개변수의 개수, 타입이 다르면 같은 이름을 사용하여 메소드를 정의할 수 있다.
ParentClass.java
package overriding;
public class ParentClass {
public ParentClass(){
System.out.println("ParentClass Constructor");
}
public void printName(){
System.out.println("ParentClass Name");
}
}
ChildClass.java
package overriding;
public class ChildClass extends ParentClass{
public ChildClass(){
System.out.println("ChildClass Constructor");
}
public void printName(){
System.out.println("ChildClass Name");
}
public void printName(String name){
System.out.println("ChildClass Name: "+name);
}
public void printName(int age){
System.out.println("ChildClass age: "+age);
}
}
MainClass.java
package overriding;
public class MainClass {
public static void main(String[] args) {
ChildClass childClass = new ChildClass();
childClass.printName();
childClass.printName("AshShine");
childClass.printName(25);
}
}
결과
ParentClass Constructor
ChildClass Constructor
ChildClass Name
ChildClass Name: AshShine
ChildClass age: 25
다음과 같이 동일한 메소드 명에 매개변수 타입만 다르게하여 정의하였고, MainClass에서 호출한 모습이다.
오버로딩을 사용할 수 있는 조건은 다음과 같다.
1. 메소드 이름이 동일해야 한다.
2. 매개변수의 개수, 타입이 달라야 한다.
오버로딩을 사용하는 이유는 하나의 이름으로 같은 기능을 하는 메소드에서 매개변수만 다르게 하여 사용하기 위해서이다. 이는 메소드의 이름을 절약하여 나중에 동일한 기능임을 알고 유지보수하기 쉬워진다.
오버로딩과 오버라이딩의 조건을 표로 정리해 보았다..
오버로딩(Overloading) | 오버라이딩(Overriding) | |
메소드 이름 | 같다 | 같다 |
매개변수 개수, 타입 | 다르다 | 같다 |
return 타입 | 영향없음 | 같다 |
'Language > Java' 카테고리의 다른 글
[Java] 익명 클래스, 익명 이너 클래스 (0) | 2022.04.03 |
---|---|
[Java] Interface(인터페이스) VS Abstract Class(추상 클래스) 차이점, 정리 (0) | 2022.04.03 |
[Java] 업캐스팅, 다운캐스팅 (0) | 2022.04.02 |
[Java] 클래스, 객체, 인스턴스, 메소드 란? (0) | 2021.07.14 |
[Java] 상속(Inheritance) (0) | 2021.07.14 |