Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

codingfarm

오버라이딩(overriding) 본문

Programming Language/JAVA

오버라이딩(overriding)

scarecrow1992 2021. 1. 7. 20:37

오버라이딩이란 조상클래스로부터 상속받은 메서드의 내용을 변경하는것이다.

 

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

출력 결과를 통해 오버라이딩의 효과에 대해 확인할 수 있다.

 

오버라이딩이 성립하기 위해서는 아래 조건을 만족해야 한다.

  1. 이름이 같아야 한다.
  2. 매개변수와 같아야한다.
  3. 리턴타입이 같아야 한다.

즉, 선언부가 서로 일치해야한다. 다만 접근제어자(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