객체는 type으로 구분한다 → 타입은 class로 만든다.
캡슐화
public class Human {
private Heart heart;
private Blood blood;
protected Gene gene;
Blood donation() {
return null;
}
}
상속
→ 추상과 구체를 위해 사용된다. / 공통 기능 전달과는 조금 다르다.
상위(부모, super, [추상])
하위(자식, this, [구체])
원자 > 물질 > 생물 > 동물 > 포유류 > 사람 > 남자 > 짱구
추상화
의미적 추상체
class Login() {
void login() {}
}
class KakaoLogin extends Login {
void login() {}
}
추상 기능을 가진 객체
abstract class Login() {
abstract void login();
}
class KakaoLogin extends Login{
void kakao() {}
@Override void login() {}
}
객체 전부가 추상적일 때(interface)
interface Login(){
void login();
}
class KakaoLogin implements Login{
void kakao() {}
@Override void login() {}
}
다형성 ( 다른 유형의 객체가 동일한 메세지에 다르게 반응하게 위함)
→ type을 여러가지고 표현할 수 있다.
classs KakaoLogin implements Login {
void kakao() {}
@Override void login() {}
}
interface Portal {
void portal();
}
class NaverLogin implements Login, Portal{
void naver() {}
@Override void login() {}
@Override void portal() {}
}
KakaoLogin k = new KakaoLogin();
Login k = new KakaoLogin(); //이게 다형성
다형성을 가진 객체는 본인 타입의 메서드만 호출 가능.(캡슐화)
Login login = new Login();
Login login - new kakaoLogin();
Login login = new NaverLogin();
login.login();
login.naver(); //불가능.
Portal portal = new NaverLogin();
portal.portal();
portal.login(); //불가능