- 이미 마련되어 있던 클래스를 재사용해서 만들 수 있다.
- 효율적이고, 개발시간을 줄여준다.
- 다중 상속 불가능 -> 2개 이상의 클래스를 상속 불가
- 부모의 생성자는 상속이 되지 않는다.
- 부모 클래스가 가진 멤버변수와 메소드를 모두 상속 받는다
- 부모 클래스 내에서 멤버변수 또는 메소드가 private 접근제한자를 사용하면
멤버변수는 상속 받으나 바로 접근이 불가능하며, 메소드는 상속 되지 않는다.- statin 메서드 또는 변수도 상속이 된다.
- 동일한 이름의 변수가 부모 클래스와 자식 클래스 둘 다 존재할 경우 부모 클래스의 변수는 가려진다.
Class Parent{ .... }; // 부모 클래스
Class Child extends parent { .... }; // 자식 클래스
※ 여기서 칼 클래스에 void 공격을 하지 않는 이유는 new 칼은 a무기로 객체를 만든 것이 아닌
무기 클래스로써 사용하는 것이기 때문에 칼 클래스에 void공격을 작성해도 실행되지 않는다.
하지만, 무기 클래스에 void 공격을 작성하면 칼 클래스에도 상속을 받기 때문에 오버라이딩은 가능하다.
- 상위클래스에 메서드만 작성해 놓고 사용해도 출력은 정상적으로 된다.
- 자식클래스는 상위클래스의 메서드를 상속받고 오버라이딩 하여 원하는 대로 변경이 가능하다.
부모 객체를 생성할 때, 부모 생성자를 선택해서 호출할 수 있다.
자식클래스(매개변수선언, ...){
super(매개값,...); // 무조건 자식생성자의 첫줄에 위치해야함.
...
}
- super(매개값, ...)은 매개값과 동일한 타입, 개수, 순서가 맞는 부모 생성자를 호출한다.
- 만약 부모 생성자가 없다면 컴파일 오류가 발생한다.
- 반드시 자식 생성자의 첫 줄에 위치해야한다.
- 부모 클래스에 기본(매개변수 없는) 생성자가 없다면 필수적으로 작성해야 한다.
기존 클래스를 확장하는 대신에 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하게 된다. 기존 클래스가 새로운 클래스의 구성요소로 쓰인다는 뜻에서 이를 컴포지션(conposition)이라고 한다
A has a B (A는 B를 가지고 있다)
class A {
B b = new B();
b.B메서드();
}
- 다른 객체를 받아들여서 그 객체의 기능을 사용하는 것이다.
ex) 사람이 핸드폰을 사서 그 핸드폰의 기능을 사용하는 것)- 받아들인 객체의 자원(메소드/변수)을 사용할 수 있다.
- 어떤 클래스 A가 또 다른 클래스인 B가 가진 기능을 사용하고 싶을 때 B클래스를 포함하면 B클래스의 기능을 사용할 수 있다.