[Java] 오버로딩과 오버라이딩(Overloading & Overriding)

2024. 9. 10. 11:14·Java

오버로딩과 오버라이딩

오버로딩(Overloading)은 한 클래스 내에서, 같은 이름의 메서드를 여러 개 정의하는 것

 

오버라이딩(Overriding)은 부모클래스로부터 상속 받은 메서드를 자식클래스에서 재정의하는 것 

 

 

 

오버로딩(Overloading)

  • 메서드 이름이 같고, 매개변수의 개수나 타입(순서)이 다른 메서드를 여러개 정의하는 것
  • 메서드 오버로딩을 사용함으로써 메서드 이름을 절약할 수 있다.
  • 같은 기능을 하는 메서드를 하나의 이름으로 사용할 수 있다.
  • 오버로딩의 조건 
    • 메서드 이름이 같아야 한다.
    • 메서드 매개변수(파라미터)의 개수가 달라야 한다.
    • 매개변수의 개수가 같다면 타입(순서)이 달라야 한다.
    • ‘리턴(반환) 타입’ 만 다른 것은 오버로딩 X
    • ‘접근제어자’ 만 다른 것은 오버로딩 X
class Overloading{
    //오버로딩 성공
    public int add(int a, int b){
        return a + b;
    }

    public int add(int a, int b, int c) {   //매개변수의 개수가 다른 경우
        return a + b + c;
    }

    public double add(double a, double b) { //매개변수의 타입이 다른 경우
        return a + b;
    }

    public double add(double a, int b, int c) {    //매개변수의 개수, 타입이 다른 경우
        return a + b + c;
    }


    //컴파일 오류 - 오버로딩 X
/*    
    public double add(int a, int b) {   //리턴(반환) 타입만 다르면 오버로딩 X
        return a + b;
    }

    protected int add(int a, int b) { //접근제어자만 다르면 오버로딩 X
        return a + b;
    } 
*/   
}


public class Test {
    public static void main(String[] args) {
        Overloading ol = new Overloading();
        System.out.println(ol.add(1, 2));
        System.out.println(ol.add(1, 2, 3));
        System.out.println(ol.add(1.0, 2.0));
        System.out.println(ol.add(1.0, 2, 3));
    }
}






/*
실행 결과
----------
3
6
3.0
6.0
*/

 

 

 

 

 

오버라이딩(Overrding)

  • 부모클래스로부터 상속받은 메서드를 자식 클래스에서 재정의하는 것
  • 메서드 이름, 매개변수, 리턴값이 모두 동일
  • @Override 애노테이션을 사용한다.
  • 오버라이딩의 조건 
    • 메서드 이름이 같아야 한다.
    • 메서드 매개변수(파라미터)의 개수, 순서, 타입이 같아야 한다.
    • 리턴(반환) 타입이 같아야 한다.
    • 접근제어자가 부모 클래스의 메서드보다 더 제한적이면 안된다.
      • ex1) 부모 클래스의 메서드 protected, 자식 클래스의 메서드 public O
      • ex2) 부모 클래스의 메서드 protected, 자식 클래스의 메서드 private X
    • static, final, private 가 붙은 메서드는 오버라이딩 불가
    • 생성자는 오버라이딩 불가
public class Car {
    public void move() {
        System.out.println("차를 이동합니다.");
    }
}



public class ElectricCar extends Car {
    @Override
    public void move() {
        System.out.println("전기차를 빠르게 이동합니다.");
    }
}



public class CarMain {
    public static void main(String[] args) {
        Car car = new Car();
        car.move();
        
        ElectricCar electricCar = new ElectricCar();
        electricCar.move();
    }
    
    
    
    
    
/*
실행결과
---------
차를 이동합니다.
전기차를 빠르게 이동합니다.
*/
저작자표시 비영리 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[Java] 2차원 배열 오름차순, 내림차순 정렬  (0) 2025.01.09
[Java] 자바 Queue에 x, y 값 두 개 삽입(Pair 클래스, Point 클래스)  (2) 2024.08.23
[Java] 빠른 입출력 BufferedReader & BufferedWriter  (0) 2024.06.19
[Java] JDK 버전 여러 개 전환하며 사용하기  (0) 2024.05.13
[Java] Math 클래스  (0) 2024.04.17
'Java' 카테고리의 다른 글
  • [Java] 2차원 배열 오름차순, 내림차순 정렬
  • [Java] 자바 Queue에 x, y 값 두 개 삽입(Pair 클래스, Point 클래스)
  • [Java] 빠른 입출력 BufferedReader & BufferedWriter
  • [Java] JDK 버전 여러 개 전환하며 사용하기
nyrimmm
nyrimmm
  • nyrimmm
    개발기록
    nyrimmm
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (82) N
      • Java (6)
      • Spring & SpringBoot (3)
      • Network (1)
      • DataBase (0)
      • SQL (1)
      • IntelliJ (3)
      • Git (0)
      • 자료구조 & 알고리즘 (2)
      • 트러블 슈팅 (1)
        • Spring (1)
      • PS (64) N
        • 백준 (22) N
        • 프로그래머스 (0)
        • SQL (9)
        • 이코테 (33)
      • 후기 & 회고 (1)
  • 태그

  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
nyrimmm
[Java] 오버로딩과 오버라이딩(Overloading & Overriding)
상단으로

티스토리툴바