(~가 ~를 가지고 있다.) -> 포함 오브젝트
한 오브젝트가 다른 오브젝트에 속한다. 단순하게 말해서 객체의 멤버필드라고 불리는 객체를 말한다.
(~ 는 ~ 이다.) 상속 ( is like a 관게는 사용금지 )
상속 해주는 클래스 -> super class
상속 받는 클래스 - sub class
클래스간의 상속은 단일상속만 가능하다. (복잡성을 낮추기 위해)
class Test extends Object{
int a;
public Test(){
//super(); => 항상 부모의 생성자를 호출, 항상 subclass의 첫번째 라인에 존재한다. }
public void setA(int a) { this.a = a;}
public int getA() { return a;}
public static void main(Sstring args[]{
Test test = new Test();
}
}
바인딩 => 메소드의 호출과 메소드 본문과의 연결
1. 정적(static) 바인딩
눈 , 코 , 입
이 세가지의 공통점은 얼굴에 있는 것이다.
그래서 이 세가지를 변수로 가지고 있는 추상클래스 얼굴.class를 만든다.
특정 부분이 구체화가 되지 않은 클래스
객체 생성 X , 상속을 목적으로 사용한다.
추상메소드 ex) 이름만 정의하고 바디 없음;
abstract void (){
}
추상클래스를 상속받는 서브클래스의 할일
1. 추상메소드를 오버라이딩 하거나,
2. 추상메소드를 오버라이딩 하지않고 추상클래스가 된다.
첫번째 예시에서 얼굴.class 를 상속받는 코.class가 있다면, 추상메소드를 넘겨받고 이를 구체화 시켜야한다.
- 공통된 메서드와 필드를 사용할 수 있다.
통일성, 유지보수성 증가
- 실체클래스 구현시, 시간절약
자동차 클래스를 구현한다고 생각하면 자동차 클래스를 추상클래스로 만들고 이를 상속받는 엔진, 바퀴, 도색 클래스를 구체화 하면 설계시간은 적게 들고, 구현하는데만 집중하면 된다.
3.규격에 맞는 자식클래스 구현
아무리 자식클래스가 자기 스타일대로 구현한다고 해도, 부모클래스가 준 필드, 메서드를 사용해야 하고, 추상메서드(컴파일 에러)로 실행조차 막기 때문에 이는 곧 규칙에 맞는 클래스 구현으로 이어진다.
anony inner class 로 만들 경우에는 객체생성이 가능.