단어가 비슷하게 생겨서 햇갈리지만 오늘 완벽하게 정리를 해보았다.
오버라이딩부터 알아보자
오버라이딩은 쉽게 말해 상위 클라스의 메소드를 하위 클라스가 재정의 하는 것이다.
abstract과 interface에서 많이 써봤다 !
이때도 상위 클라스에 메소드 정의만내리고 하위클라스에서 @override를 사용해 재정의하였다.
public class Main{
public static void main(String[] args){
Boy obj = new Boy();
obj.eat();
}
public void eat(){
System.out.println("아이가 초콜릿을 먹고있다");
}
}
class Boy extends Main{
public void eat(){
System.out.println("소년이 초콜릿을 먹고있다");
}
}
->소년이 초콜릿을 먹고있다.
메인 클라스 인스턴스 메소드에는 아이가 초콜릿을 먹고있다로 나오지만
타입 Boy의 obj 레퍼런스 변수가 생성되면서 그 안에 있던 인스턴스 메소드의 값이 출력된다.
오버라이딩은 상위 클라스가 반드시 필요하며 , 메소드 이름 , 리턴타입 , 매개변수 전부 동일해야 작성할 수 있다
오버로딩은 메서드 이름만 같으면 언제든 메서드를 작성할 수 있다.
public class Math {
public int add(int a, int b) {
return a + b;
}
public float add(float a, float b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public long add(long a, long b) {
return a + b;
}
}
add라는 메소드 이름만 같고 타입도 다 다르다 ~
public class Math {
public static int add(int a, int b) {
return a + b;
}
public static int add(int a, int b, int c) {
return a + b + c;
}
}
이렇게 파라메터 수가 다를 수 있고 리턴되는 값이 다를 수 있다.
오버로딩을 하는 이유는 1처럼 똑같은 동작을 하는 메소드 만드는 것을 피하기 위해 사용한다,
오버로딩을 하면 intAdd(), doubleAdd(), floatAdd(), longAdd(), ... 이런식으로 똑같은 기능을 하는 메소드를 여러번
작성할 필요가 없다.
그냥 add()만 넣고 모든 타입이 가능하게 만들 수 있다.
'Java' 카테고리의 다른 글
this 키워드 모두 정리!! (변수,생성자,파라메터,클래스) (0) | 2022.01.15 |
---|---|
인텔리제이에서 Javadoc 생성하기 (0) | 2022.01.13 |
abstract 클라스, 추상클라스 vs 인터페이스 (0) | 2022.01.08 |
자바의 자료구조- Map,HashMap (0) | 2022.01.07 |
자바의 자료구조-Set,HashSet 개념 및 사용법 (0) | 2022.01.07 |
댓글