[ 공부 목표 ]
- 대답은 간단하게, 지식 습득은 깊이있게
- 가능하다면 짧고 간결하게 대답하자.
- 세부적인 지식에 대한 꼬리질문의 가능성을 생각해 깊이 있게 공부하자.- 음성메모를 활용하기
- 두괄식으로 말하자.
- 어떤 내용이나 주장이 분명하게 전달이 되었는지 확인하자.
- 이해한 것을 바탕으로 자연스럽게 설명하는 연습을 하자.
- 목소리의 강도, 발음 등 개선점 찾자.
부모가 가진 기능을 올라타서 덮어쓰기(재정의)를 했다.
자식 클래스가 부모 클래스를 상속받으면, 자식 클래스에서 부모 클래스의 메소드를 재정의할 수 있다.
class Cal{
public int sum(int v1, v2){
return v1 + v2;
}
}
class Cal3 extends Cal{
// 부모가 가지고 있지 않은 메서드
public int minus(int v1, v2){
return v1 - v2;
}
// 부모가 가진 메서드를 재정의 : Overriding
public int sum(int v1, v2){
System.out.println("Cal3!!!");
return v1 + v2;
}
}
public class InheritanceApp{
public static void main(String[] args) {
Cal c = new Cal();
System.out.println(c.sum(2,1));
Cal3 c3 = new Cal3();
System.out.println(c3.sum(2,1));
System.out.println(c3.minus(2,1));
System.out.println(c3.sum(2,1));
}
}
// 출력값
// 3
// Cal3!!!
// 3
// 1
// Cal3!!!
// 3
형태가 다르다면, 같은 이름의 메서드를 과적할 수 있다.
같은 이름의 메서드를 매개변수만 다르면 얼마든지 여러개 정의하고 사용할 수 있다.
class Cal{
public int sum(int v1, v2){
return v1 + v2;
}
// Overloading
public int sum(int v1, v2, v3){
return v1 + v2 + v3;
}
}
class Cal3 extends Cal{
public int minus(int v1, v2){
return v1 - v2;
}
public int sum(int v1, v2){
System.out.println("Cal3!!!");
return v1 + v2;
}
}
public class InheritanceApp{
public static void main(String[] args) {
Cal c = new Cal();
System.out.println(c.sum(2,1));
System.out.println(c.sum(2,1,1)); // 출력
Cal3 c3 = new Cal3();
System.out.println(c3.sum(2,1));
System.out.println(c3.minus(2,1));
}
}
// 출력값
// 3
// 4
// Cal3!!!
// 3
// 1
프로그래밍 공부를 시작하면서, 매번 overriding과 overloading의 차이를 잘 구분하라고 하셨던게 기억난다. 아직까지도 설명 못하고 있다가 오늘에서야 비로서 확실히 외우고 갈 수 있겠다 !
Overriding 개념을 이해하기 위해서는 상속에 대해서 알아야하고, 상속 개념을 이해하기 위해서는 객체지향 프로그래밍에 대해서 알아야했다.
Overloading은 상속과 직접적 관련이 없다.(상속과 Overloading은 함께 사용될 수 있다.)
글이 날라가서 처음부터 다시 쓰는.. 이제 오버라이딩과 오버로딩은 절대 안잊어버리겠다
참고자료