ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (JAVA) 메소드 오버로딩 vs 메소드 오버라이딩
    JAVA 2021. 7. 7. 17:11

    1. 메소드 오버로딩

     

    JAVA는 C언어와 다르게 함수명을 중복해서 정의할 수 있다. 조건과 특징은 아래와 같다.

    • 같은 알고리즘(로직) 기능을 가지고 있어야 한다.
    • 매개변수, 인자의 개수 or 데이터 타입(리턴 타입)이 달라야 한다. ( 하지만 기능은 같음 )
    • 상속 관계 X
    • 여러개 정의할 수 있다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package test;
     
    public class Test1 {
        static int sum(int a, int b) {
            return a+b;
        }
        static int sum(int a, int b, int c) {
            return a+b+c;
        }
        static double sum(double a, double b) {
            return a+b;
        }    
        
        public static void main(String[] args) {
            
            int a = 10, b = 20, c = 30;
            double d = 14.2 , e = 15.5;
            
            System.out.println(sum(a,b)); // 첫 번째 함수
            System.out.println(sum(a,b,c)); // 두 번째 함수
            System.out.println(sum(d,e));     // 세 번째 함수
        }
    }
     
    cs

     

    오버로딩 함수 실행 결과

    2. 메소드 오버라이딩

    메소드 오버라이딩은 객체지향의 핵심 중 하나인 '상속'의 중요한 개념 중 하나이다.

    메소드 오버라이딩을 하기 위한 조건과 특징은 아래와 같다.

    • 상속관계 이어야 한다.
    • 인자의 개수, 타입 and 리턴타입 모두 같아야한다. (= method signature가 동일해야 함!)
    • 부모 클래스에 있는 메서드의 기능을 재정의 하고 싶을 때 사용한다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    package test;
    class Animal{
        String name;
        int age;
        
        Animal(String name){
            this.name = name;
        }
        
        void show() {
            System.out.println("이 동물의 이름은 " + this.name + "입니다.");
        }
    }
     
    class Turtle extends Animal{
        Turtle(String name, int age){
            super(name);
            this.age = age;
        }
        
        void show() { // 메소드 오버라이딩 --> 부모 클래스의 show() 함수를 재정의합니다.
            System.out.println("이 거북이의 이름은 " + this.name + "이고 " + this.age + "살 입니다.");
        }
    }
     
    public class Test2 {
        public static void main(String[] args) {
            Animal a = new Animal("꼬부기");
            Turtle b = new Turtle("꼬부기"120);
     
            a.show();
            b.show();
        }
    }
     
    cs

    같은 이름의 함수지만 다른 기능

Designed by Tistory.