일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 보이는학생
- 코테공부
- 기초지식
- 대소문자변환
- 코테
- 신입개발자면접
- 코테연습
- 형변환
- 주석해제
- replace
- 코딩테스트
- 자바
- 코딩테스트공부
- substring
- length
- java
- 코딩테스트연습
- 자바문자열치환
- Object.toString(0
- 여러줄주석
- 개발자면접
- 코당테스트공부
- 자동정렬해제
- 특정문자뒤집기
- 회문문자열
- 문자찾기
- 가장짧은문자거리
- 긴단어찾기
- 자바기초
- 개발자
- Today
- Total
일단 해보자고~
자바 :: Overloading / Overriding의 사용법과 차이 본문
1. Overloading(오버로딩)
- 의미 : 사전적인 의미로 '과적하다'라는 뜻인데 의미와 비슷하게 메서드의 이름은 같으면서 매개변수의 개수가 다르거나, 타입이 다른 경우를 의미함.
- 조건 : 메서드의 이름이 같고, 매개변수의 개수나 타입이 달라야 함.
( * return 값만 다른 것은 오버로딩 불가)
- 예시
class OverTest{
// 반환형이 void이고 이름이 cat인 메서드
void cat() {
System.out.println("매개변수 없음");
}
// 반환형이 void이고 이름이 cat인 메서드이면서 매개변수를 정수형으로 1개 갖음.
void cat(int a) {
System.out.println("매개변수 : " + a);
}
// 반환형이 void이고 이름이 cat인 메서드이면서 매개변수를 정수형으로 2개 갖음.
void cat(int a, int b) {
System.out.println("매개변수 : " + a + ", " + b);
}
// 반환형이 void이고 이름이 cat인 메서드이면서 매개변수를 String으로 1개 갖음.
String cat(String str) {
System.out.println("매개변수 : " + str);
return str;
}
}
public class OverloadingTest {
public static void main(String[] args) {
OverTest ot = new OverTest();
ot.cat();
ot.cat(0);
ot.cat(1, 2);
ot.cat("Overloading");
}
}
출력 :
2. Overriding(오버라이딩)
- 의미 : 부모&상위 클래스에서 상속받은 것을 자식&하위 클래스에서 재정의 하는 것. 상속받은 메서드를 그대로 사용할 수도 있지만, 자식&하위 클래스에서 상황에 맞게 변경해야 하는 경우 오버라이딩할 필요가 생김.
- 조건 : 오버라이딩은 부모&상위 클래스의 메서드를 재정의 하는 것이므로, 자식&하위 클래스에서는 오버라이딩하고자하는 메서드의 이름, 매개변수의 타입, return값이 모두 같아야 함.
- 예시
public class OverridingTest {
public static void main(String[] args) {
Parent parent = new Parent();
Child child = new Child();
ChildChild cchild = new ChildChild();
parent.name();
child.name();
cchild.name();
}
}
class Parent{
void name() {
System.out.println("부모");
}
}
class Child extends Parent{
@Override
public void name() {
System.out.println("자식");
}
}
class ChildChild extends Parent{
@Override
protected void name() {
System.out.println("자식+자식");
}
}
출력 :
* Overriding 할 때의 알아 두어야 할 것.
1. 자식&하위 클래스에서 오버라이딩하는 메서드의 접근제어자는 부모 클래스보다 더 좁게 설정할 수 없음.
- 위 예제에서 부모&상위 클래스의 접근제어자는 default로 설정되어 있다. 여기서 자식&하위 클래스들은 default보다 같거나 더 넓은 범위의 접근제어자만 설정할 수 있으므로 private을 제외한 default, protected, public만 사용 가능함.
2. 예외(Exception)는 부모&상위 클래스의 메서드 보다 많이 선언할 수 없다.
- 부모&상위 클래스에서 어떤 예외를 throws 한다고 하면, 자식&하위 클래스에서는 그 예외보다 더 큰 범위의 예외를 throws 할 수 없다.
3. static 메서드를 인스턴스의 메서드로 또는 그 반대로 바꿀 수 없다.
- 부모&상위 클래스의 static메서드를 자식&하위 클래스에서 같은 이름으로 정의할 수 있지만 이것은 다시 정의하는 것이 아니라 같은 이름의 static메서드를 새로 정의하는 것.
4. 오버라이딩 할 때 개발자의 실수를 방지하기 위해 메서드 위에 @Override를 관례적으로 적음.
Overloading VS Overriding
이름만 비슷할 뿐 명백히 다른 것이다.
오버로딩 : 메서드의 이름은 같으면서, 매개변수의 타입이 다르거나 타입이 다른 경우
오버라이딩 : 부모&상위 클래스의 메서드를 자식&하위 클래스에서 재정의 하여 사용.
'Programming Language > Java' 카테고리의 다른 글
자바 :: String.valueOf() / Object.toString()의 사용법과 차이 (0) | 2022.09.08 |
---|---|
자바 :: int / Integer의 개념과 차이 (0) | 2022.09.07 |
자바 :: replace() / replaceAll()의 사용법과 차이 (0) | 2022.09.06 |
자바 :: 문자열 자르기 split() / substring()의 사용법 (0) | 2022.09.06 |
자바 :: length / length() / size()의 사용법과 차이 (0) | 2022.09.05 |