일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 다익스트라
- 이진탐색
- binary search
- SQL
- Two Points
- Stored Procedure
- 스토어드 프로시저
- Brute Force
- Hash
- String
- Trie
- Dijkstra
- two pointer
- DP
- 그래프
- MYSQL
- union find
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