티스토리 뷰

(메서드)오버로딩(overloading)

  • 한 클래스 안에서 같은 이름의 메서드를 여러 개 정의하는 것
더보기

한 클래스 안에서 같은 이름의 메서드를 여러 개 정의하는 것

void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)

 

오버로딩 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 타입 또는 개수가 달라야 한다.
  3. 반환 타입은 영향 없다.
더보기

1. 메서드 이름이 같아야 한다.

 

2. 매개변수의 타입 또는 개수가 달라야 한다.

// 보기 1
int add(int a, int b) { return a + b; }
int add(int x, int y) { return x + y; }  // 오버로딩 x
// 보기 3
long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }  // Ok.

3. 반환 타입은 영향 없다.

// 보기 2
int  add(int a, int b) { return a + b; }
long add(int a, int b) { return (long)a + b; }  // 오버로딩 x

 

예제6-10

  • 코드
  • 오버로딩의 좋은 예 : 매개변수는 다르지만 같은 의미의 기능 수행
더보기

오버로딩의 좋은 예 : 매개변수는 다르지만 같은 의미의 기능 수행

class MyMath3 {
    int add(int a, int b) {
        System.out.print("int add(int a, int b) - ");
        return a + b;
    }
	
    long add(long a, long b) {
        System.out.print("long add(long a, long b) - ");
        return a + b;	
    }

    int add(int[] a) { // 배열의 모든 요소의 합을 결과로 돌려준다.
        System.out.print("int add(int[] a) - ");
        int result = 0;
        for(int i = 0; i < a.length; i++) {
            result += a[i];
        }
        return result;
    }
}

오버라이딩

  • 조상클래스로부터 상속받은 메서드 구현부를 자신에 맞게 변경하는 것
더보기

조상클래스로부터 상속받은 메서드 구현부를 자신에 맞게 변경하는 것

 

예제OverrideTest

  1. 오버라이딩 실습
  2. Object클래스의 toString() 오버라이딩 실습
  3. 매개변수가 있는 생성자 실습
더보기

1. 오버라이딩 실습
2. Object클래스의 toString() 오버라이딩 실습
3. 매개변수가 있는 생성자 실습

 

오버라이딩의 조건

  • 1. 선언부가 조상클래스의 메서드와 일치해야 한다.(① 반환타입 ② 메서드이름 ③ 매개변수목록)
  • 2. 접근 제어자를 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  • 3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
  • 4. 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
더보기

1. 선언부가 조상클래스의 메서드와 일치해야 한다.

  1. 반환타입
  2. 메서드이름
  3. 매개변수목록

 

2. 접근 제어자를 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.

  • public > protected > (default) > private

 

3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

class Parent {
	void parentMethod() throws IOException, SQLException {
		...
	}
}

class Child extends Parents {
	void ParentMethod() throws IOException {
		...
	}
	...
}

 

오버로딩 vs 오버라이딩

  • 오버로딩 - 기존에 없는 새로운 메서드를 정의하는 것(new)
  • 오버라이딩 - 상속 받은 메서드의 내용을 변경하는 것(modify)
더보기
class Parent {
    void parentMethod() {}
}

class Child extends Parent {
    void parentMethod() {}         // 오버라이딩
    void parentMethod(int i) {}    // 오버로딩
    
    void childMethod() {}          // 메서드 정의
    void childMethod(int i) {}     // 오버로딩
    void childMethod() {}          // 에러. 중복정의 되었음 already defined in Child
}

 

🍪

📄 - 객체지향개념 암기노트 바로가기

 

'Java의 정석_기초편' 카테고리의 다른 글

변수의 초기화  (0) 2022.10.13
생성자(constructor)  (0) 2022.10.12
변수와 메서드  (0) 2022.10.11
클래스와 객체  (0) 2022.10.10
객체지향 언어  (0) 2022.10.10
댓글
공지사항