상속(Inheritence)
특징
- 어떤 클래스의 모든 멤버 변수 및 메소드를 계승하여 새로운 클래스를 생성하는 것
- 상속 대상 : 부모 클래스
- 상속 결과 : 자식 클래스
1
class Developer extends Person -> 상속대상 : Person, 상속결과 : Developer
- 상속 관계를 흔히 ‘IS-A’ 관계라고 부른다.
- 클래스를 상속하면, 부모 클래스의 모든 멤버 변수와 메소드를 상속 받는다.
컴포지션(Composition)
특징
- 상속과 유사하지만, 한 클래스가 다른 클래스의 객체를 포함하는 관계
- 내부에 포함하고 있어 ‘HSA-A’ 관계로 표현된다.
1 2 3 4
class Develop{ String name; Person person; // 상속 받지 않고, 클래스 내부에서 다른 클래스의 객체를 선언한다. }
메소드 오버라이딩
특징
- 다른 클래스에서 정의한 메소드를 상속받아 재정의 하는 것.
- 다형성(Polymorphism)의 근간이 된다.
- 부모클래스 자료형으로 자식클래스를 받을 수 있다.
1 2
person p = (person) developer; p.writeCode();
- 부모 클래스로 캐스팅 됬지만 자식 클래스에서 오버라이딩된 메소드가 실행이 된다.
- 부모 클래스 배열에 어떠한 자식 클래스도 들어갈 수 있다.
1
person[] people = new person[]{new Student(), new Dev()};
- 위와 같은 방식으로 다양한 자식클래스를 효과적으로 데이터 처리할 수 있다.
Super 키워드
특징
- this가 자신의 객체를 참조하듯, super로 부모 객체를 참조 할 수 있다.
- 자식 클래스에서 생성자를 만들어줄 때 부모 클래스의 생성자를 먼저 호출해야 한다. 단, 부모 클래스가 기본 생성자를 사용하는 경우는 호출하지 않아도 된다.
- super.super로 부모의 부모클래스는 참조할 수 없다. 바로 위 부모 클래스만 가능하다.
- 부모 클래스, 자식 클래스, 로컬 메소드에 같은 이름의 변수가 지정되어 있다면 하위 계층에서 재정의하여 사용하게 된다. 이때 상위 클래스 변수가 사라지는게 아니고 하위 클래스에서 재정의한 변수에 우선적으로 접근하게된다.
1 2 3 4 5 6 7
class Foo{ String x; } class Bar extest Foo{ String x; public method(){String x;} }
제어자(Modifier)
특징
- 클래스, 변수, 메소드에 부가 기능을 부여하는 키워드
- 접근 제어자 : 접근할 수 있는 범위를 정하는 키워드
제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지 | 전체 |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |