| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
													Tags
													
											
												
												- Two Points
 - binary search
 - Stored Procedure
 - Hash
 - SQL
 - MYSQL
 - Dijkstra
 - two pointer
 - Trie
 - 스토어드 프로시저
 - union find
 - 다익스트라
 - DP
 - String
 - 그래프
 - 이진탐색
 - Brute Force
 
													Archives
													
											
												
												- Today
 
- Total
 
codingfarm
오버라이딩(overriding) 본문
오버라이딩이란 조상클래스로부터 상속받은 메서드의 내용을 변경하는것이다.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
 | 
 class Point{ 
    int x; 
    int y; 
    String getLocation() { 
        return "x : " + x + ", y :" + y; 
    } 
} 
class Point3D extends Point{ 
    int z; 
    String GetLocation(){ 
        return "x : " + x + ", y :" + y + ", z : " + z; 
    } 
} 
 | 
cs | 
가령 아래 코드를 확인해보면
| 
 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 
 | 
 package project_1; 
class Parent{ 
    void Print() { 
        System.out.println("it's parent"); 
    } 
} 
class Child extends Parent{ 
    void Print() { 
        System.out.println("it's child"); 
    }     
} 
public class Hello { 
    public static void main(String[] args) { 
        Parent p = new Parent(); 
        Child c = new Child(); 
        Parent i = new Child();         
        p.Print(); 
        c.Print(); 
        i.Print(); 
    }     
} 
 | 
cs | 

출력 결과를 통해 오버라이딩의 효과에 대해 확인할 수 있다.
오버라이딩이 성립하기 위해서는 아래 조건을 만족해야 한다.
- 이름이 같아야 한다.
 - 매개변수와 같아야한다.
 - 리턴타입이 같아야 한다.
 
즉, 선언부가 서로 일치해야한다. 다만 접근제어자(access midofier)와 예외(exception)는 제한된 조건하에서만 다르게 변경할 수 있다.
조건은 아래와 같다.
1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
가령 조상 클래스에서 정의된 메서드의 접근 제어자가 protected 이면, 이를 오버로딩 하는 자손 클래스의 메서드는 접근 제어자가 protected나 public이어야 한다.
접근 제어자의 범위를 내림차순으로 나열하면 public $\rightarrow$ protected $\rightarrow$ private 의 순서이다.
2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다. (조상 클래스에 적용된 예외만이 자식클래스에 허용된다.)
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
 | 
 package project_1; 
class Parent{ 
    void ParentMethod() throws IOException, SQLException  
    {    } 
} 
class Child extends Parent{ 
    void ChildMethod() throws IOException 
    {    }     
} 
 | 
cs | 
반면 아래의 코드는 허용되지 않는다.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
 | 
 package project_1; 
class Parent{ 
    void ParentMethod() throws IOException, SQLException  
    {    } 
} 
class Child extends Parent{ 
    void ChildMethod() throws Exception 
    {    }     
} 
 | 
cs | 
Exception는 모든 예외의 최고 조상이므로 가장 많은 개수의 예외를 던질 수 있도록 선언한것이므로 잘못된 오버라이딩이다.
3. 인스턴스 메서드를 static 메서드로 또는 그 반대로 변경할 수 없다.
'Programming Language > JAVA' 카테고리의 다른 글
| 제어자(modifier) (0) | 2021.03.07 | 
|---|---|
| super (0) | 2021.01.07 | 
| 상속(inheritance) (0) | 2021.01.07 | 
| 변수 (0) | 2020.11.02 | 
| 객체지향 프로그래밍 (0) | 2020.11.01 | 
			  Comments