NULL
JAVA 오버로드와 오버라이딩 차이점과 개념정리 본문
오버로딩과 오버라이딩 차이
오버로딩이란?
서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것이였다.
오버라이딩이란?
상속관계에 있는 부모클래스에서 이미 정의된 메소드를 자식클래스에서
같은 시그니처를 갖는 메소드로 재정의하는 것이라고 할 수 있다.
간단히 정의하면
오버로딩은 새로운 메소드를 정의
오버라이딩은 상속받은 기존 메소드를 재정의
class Parent {
void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }
}
class Child extends Parent {
// 오버라이딩된 display() 메소드
void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }
void display(String str) { System.out.println(str); } // 오버로딩된 display() 메소드
}
public class Inheritance06 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
ch.display("오버로딩된 display() 메소드입니다.");
}
}
오버라이딩의 조건
1. 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전동일 해야한다.
하지만 메소드 반환타입은 부모클래스의 반환타입으로 변환할수 있는 타입이라면 변경가능하다.
2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.
3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.
메소드 오버라이딩
Car클래스를 상속받은 Bus클래스는 부모 클래스가 가지고 있는 run() 메소드를 잘 사용한다.
//run 메소드를 가지고 있는 Car클래스
public class Car{
public void run(){
System.out.println("Car의 run메소드");
}
}
//Car 를 상속받는 Bus 클래스
public class Bus extends Car{
}
public class BusExam{
public static void main(String args[]){
Bus bus = new Bus();
bus.run(); //Car의 run메소드가 실행된다.
}
}
Bus클래스에 부모가 가지고 있는 메소드와 모양이 같은 메소드를 선언
public class Bus extends Car{
public void run(){
System.out.println("Bus의 run메소드");
}
}
public class BusExam{
public static void main(String args[]){
Bus bus = new Bus();
bus.run(); //Bus run메소드가 실행된다.
}
}
BusExam을 실행하면 "Bus의 run메소드"가 출력된다.
메소드를 오버라이드하면, 항상 자식클래스에서 정의된 메소드가 출력된다.
오버라이드 한다고 해서 부모의 메소드가 소멸되는 것은 아니다.
super를 사용하면 부모 메소드를 호출할 수 있다.
public class Bus extends Car{
public void run(){
**super.run();** // 부모의 run()메소드를 호출
System.out.println("Bus의 run메소드");
}
}
'Back-end > JAVA' 카테고리의 다른 글
클래스 이름 가져오기 (0) | 2022.02.08 |
---|---|
JAVA 클래스 형변환 개념정리 (0) | 2022.02.02 |
JAVA super와 부모생성자 개념정리 (0) | 2022.02.02 |
JAVA 추상클래스 (0) | 2022.01.27 |
JAVA 캡슐화, 접근제한자 (0) | 2022.01.27 |
Comments