상속
왜 나오게 되었을까?
기존 만들어 놓은 클래스를 단순 복사 붙여넣기가 아닌 방법으로 다시 재사용하기 위해서. → for reuse!
A클래스가 B클래스를 상속 받을 때,
A클래스 : 부모 클래스
B클래스 : 자식 클래스
ㄴ 장점
1.
상송을 사용하면 중복되는 코드를 줄일 수 있다.
2.
상속 받아서 이미 존재하는 클래스의 필드와 메소드를 재사용 할 수 있다.
extends
자식 extends 부모클래스 : 키워드를 통해 부모 클래스를 상속 받을 수 있다.
생성자 호출 순서
부모 클래스의 생성자 → 자식클래스의 생성자
ㄴ 왜 자식 객체 생성시 부모생성자 까지 호출되는가?
•
자식 클래스 객체 안에는 부모 클래스에서 상속된 부분이 들어 있다.
•
따라서 자식 클래스 안의 부모 클래스 부분을 초기화하기 위하여
부모 클래스의 생성자도 호출되는 것이다
super()
→ 호출하면 부모클래스 생성자 호출
•
this()와 같이 명시적인 생성자 호출
•
묵시적인 생성자로서 컴파일러는 부모 클래스의 기본생성자가 자동 호출한다.
→ class B extends A일때 public B()에서 super()를 컴파일러에서 기본 호출 한다. 이때 class A에서 기본생성자가 없을 경우 super()를 할 생성자가 없어 오류가 생긴다.
→따라서 인수형태에 따라 적절한 생성자가 선택되어야 한다.
메소드 오버라이딩
→ 자식클래스가 부모클래스의 메소드를
자신의 필요에 맞추어 재정의하는것
•
자신의 함수 바디만 달리 하여야함
오버라이딩 vs 오버로딩
ㄴ 오버라이딩
오버라이딩은 자식 클래스의 공통된 부분은 부모클래스에서 정의한다.
@override 붙이기
ㄴ 오버로딩
같은 함수이름으로 파라미터의 인자 또는 갯수를 달리 하는 것을 말한다.
ex)println()
다형성
객체들의 타입이 다르면 똑같은 메시지가
전달되더라도 서로 다른 동작을 하는 것!!
다형성의 이해
1.
부모 = 자식 가능 A a = new B() : B가 A를 상속받을때 가능하다.
2.
오버라이딩은 자식꺼가 실행된다.
3.
자식 = 부모가 기본적으로 안된다. B b = new A() : 컴파일 에러
•
자식 = (자식)부모 에서 기본적으로는 안되지만 부모가 자식의 메모리를 다가지고 있을때는 가능함