티스토리 뷰
오버로딩(Overloding)
같은 이름의 메소드 또는 생성자로 입력 받은 매개변수의 타입과 갯수에 따라 다른 액션을 취하도록 하는 것이다.
OverLoding(int n){
System.out.println("int "+n);
}
OverLoding(String s){
System.out.println("String "+s);
}
오버로딩(OverLoding)의 생성자다.
이름은도 같고 입력 받는 매개변수의 개수 또한 같다.
하지만 매개변수의 타입(int, String)이 다르기 때문에 오버로딩이 가능하다.
OverLoding overloding2 = new OverLoding(2);
OverLoding overloding3 = new OverLoding("Pigg");
생성자이므로 객체를 생성할 때 내용이 실행되는데
int 타입인 숫자(2)를 받았을 때는
OverLoding(int n){
System.out.println("int "+n);
}
이 실행되어 int 2 가 출력되고
String 타입의 문자열("Pigg")를 받았을 때는
OverLoding(String s){
System.out.println("String "+s);
}
이 실행되어 String Pigg 가 출력된다.
타입이 같더라도 개수가 다를 경우 오버로딩이 적용된다.
OverLoding(int n){
System.out.println("int "+n);
}
OverLoding(int n, int n2){
System.out.println("int "+n+" int2 "+n2);
}
매개변수로 똑같은 int 타입이지만 개수가 다르기 때문에 오버로딩이다.
OverLoding overloding2 = new OverLoding(2);
OverLoding overloding4 = new OverLoding(2,2);
overloding4 는 int 타입의 매개변수를 2개 받았기 때문에
int 2 int2 2 가 출력된다.
생성자 뿐만 아니라 메소드 또한 마찬가지다.
오버라이딩(Overriding)
부모클래스로부터 메소드를 상속 받았으나,
그 메소드(매개변수, 리턴 타입이 완전히 같은)를
자식클래스에서 재정의 하여 사용하는 것(상속 받은 메소드 무시)이다.
도대체 이게 무슨 말이냐...?
일단 오버라이딩을 이해하기 위해서는 상속(Inheritance)을 반드시 알아야 한다.
상속을 간단히 설명하자면,
상속을 해 주는(부모 클래스)와 상속을 받는(자식(자손) 클래스)로 나눌 수 있다.
자식 클래스는 부모 클래스로부터 필드와 메소드를 상속 받는다.
상속 받은 필드와 메소드는 자식 클래스에 정의되어 있지 않더라도 사용할 수 있다!
기본적으로 모든 필드와 메소드를 상속 받을 수 있지만
접근 제어자의 영향을 받으며 그에 따라 범위가 달라진다.
이제 상속을 이해했으니 다시 본론으로 들어가서
class Dog {
void sound(){
System.out.println("멍멍");
}
}
class Poodle extends Dog {
@Override//오버라이드 했다는 표시로 없어도 실행에 변화는 없다.
void sound(){
System.out.println("왈왈");
}
}
class Chihuahua extends Dog {
@Override
void sound(){
System.out.println("뭉뭉");
}
}
class BigDog extends Dog {
}
Dog 는 소리를 낼 수 있다. ("멍멍")
Poodle, Chihuahua, BigDog
이 3개의 클래스는 Dog 로부터 상속을 받아 소리(sound())를 낼 수 있을것이다.
("멍멍")
하지만 자세히 보면 Poodle, Chihuahua 에는 상속 받은 소리(sound())와 똑같은 이름의 메소드(Sound())가 구현되어 있다.
부모에게도 상속 받고 자식에게도 완전히 같은 메소드가 있다...?
실행을 해보자
class AnimalTest01{
public static void main(String args[]){
Dog dog = new Dog();
Poodle poodle = new Poodle();
Chihuahua chihuahua = new Chihuahua();
BigDog bigDog = new BigDog();
dog.sound();
poodle.sound();
chihuahua.sound();
bigDog.sound();
}
}
dog, poodle, chihuahua, bigDog
모두에게 소리(sound)를 내보라 했다.
<실행 결과>
dog 의 소리sound() 는 그대로 "멍멍" 이다.
sound() ㅡ> 멍멍
poodle 은 부모(dog)의 소리내는 sound()의 기능을 상속 받았지만
sound()를 poodle 클래스 자체에서 재정의 했기 때문에
부모클래스의 sound()("멍멍") 를 무시하고
재정의 한 클래스 sound()("왈왈") 를 실행한다.
sound() ㅡ> 왈왈
chihuahua 또한 부모(dog)의 소리내는 sound()의 기능을 상속 받았지만
sound()를 chihuahua 클래스 자체에서 재정의 했기 때문에
부모클래스의 sound()("멍멍") 를 무시하고
재정의 한 클래스 sound()("뭉뭉") 를 실행한다.
sound() ㅡ> 뭉뭉
bigDog 는 부모(dog)의 소리내는 sound()의 기능을 상속 받았으므로 "멍멍" 이다.
sound() ㅡ> 멍멍
'Programing > JAVA' 카테고리의 다른 글
[JAVA] 자바 배열 선언 (0) | 2020.07.30 |
---|---|
[JAVA] 자바 this, super (0) | 2020.07.29 |
JAVA 자바 - 데이터 타입 (0) | 2020.07.28 |
- Total
- Today
- Yesterday
- 인터넷기록
- 재생id
- 콜백함수
- 탭복구
- 부모클래스
- ASCII Code Table
- 자급제폰
- 우클릭 방지
- 방문자수
- 크롬
- 자급제
- 1366
- 유튜브ID에러
- 배열선언
- 유튜브오류
- 방문기록
- 7일차
- 도망가는꿈
- 직접유입
- LinkedList
- 크롬브라우저
- 아스키코드표
- 자바
- 알뜰폰
- 셀프개통
- 한글인식
- 애드블록
- 티스토리
- 과일꿈
- 자식클래스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |