2022년 2월 28일 월요일
오후 8:03
Inheritance
Parent라는 class에 method1이라는 멤버가 있다고 하자
근데 이 class를 수정 불가 or 하기 싫은데 Method2를 추가하고 싶다면?
Class Parent {
public void method1() {
//..
}
}
▼ copy 1
//쉽긴한데 Parent에서 생긴 버그를 수정하려면 ClonedChild도 하나하나 다 수정해야함
Class ClonedChild {
public void method1() {
//..
}
public void method2() {
//..
}
}
▼ copy 2
Class child extends Parent{
public void method2() {
//..
}
}
이 class는 Parent를 extends한다는건 Parent의 class를 상속받는다는 건데,
이 Child에는 method1이 구현되어 있지 않지만 상속받았기에 Parent의 method1을 사용할 수 있게됨. 그리고 Parent의 method를 수정하면 얘를 상속받는 자식들의 모든 method들이 수정되는 효과적인 작업이 가능.
Interface
Interface Contract {
public String method1(String param);
public int method2(int param);
}
...
Class concreate1 implements Contract{
}
//concreate1이라는 class는 contract라는 interface에 적혀있는 method들의 형식을 구현했다 or 구현해야 한다.
이상태로 compile을 하게 되면 compile조차 되지 않음.
→Why? Contract에 적혀있는 method들을 정의해야한다는 규칙을 어겼기 때문에
Class concreate1 implements Contract{
public String method1(String param) {
return "foo";
}
public int mehod2(int param) {
return 1;
}
}
Contract에 적혀있는 형태의 method를 구체적으로 구현해야하는 책임을 concreate1이 가지게 됨
Contract에 적혀있는 것들을 구현한다는 일종의 계약인 셈
Interface
서로 같은 이름의 class가 존재하려면 그것을 서로 다른 package에 담아야 한다!