월루를 꿈꾸는 대학생
7-1 객체지향 본문
1. 상속
1.1 상속의 정의 장점
- 기존의 클래스를 재사용하여 새로운 클래스 작성하는 것
- 재사용성 up .. 생산성 up
- extends 키워드 사용
class Child extends Parent {
//
}
자식 클래스에서는 따로 선언하지 않아도 부모 클래스 멤버 사용가능
자손 클래스는 부모 클래스의 모든 멤버를 상속 받기에 항상 부모 클래스보다 같거나 많은 멤버를 가짐
생성자와 초기화 블럭은 상속되지 않는다 ! 다만 멤버만 상속
자손 클래스의 멤버 개수는 조상클래스보다 항상 같거나 많다
자손 클래스의 인스턴스를 생성하면 부모 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성 즉 자손 클래스 인스턴스화시 부모 클래스도 포함된 것으로 만들어짐
1.2 클래스 간의 관계 - 포함 관계
- 상속 이외에 클래스를 재사용하는 방법 : 포함
- 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언
- 다른 클래스를 멤버변수로 선언하여 포함 시키는 것
1.3 클래스 간의 관계 결정하기
원은 점이다! Circle is a Point -> 상속
원은 점을 가지고 있다 ! Circle has a Point -> 포함
1.4 단일 상속
- 하나 이상의 클래스로부터 상속을 받을 수 없음
- 즉 자바에서는 단일 상속만을 허용
1.5 Object 클래스 - 모든 클래스의 조상
- Object 클래스는 모든 클래스의 상속계층 최상위에 있음
- 최상단의 object 클래스의 멤버들을 상속받기 때문에 Object에 정의된 멤버들을 사용할 수 있었다
ex _ toString() , equals(Object o) 등
2. 오버라이딩
2.1 오버라이딩
- 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
- 즉 위 조상 클래스의 멤버들을 자손 클래스에서 변경해서 사용하는 것!!
2.2 오버라이딩 조건
- 이름이 같아야한다
- 매개변수가 앝아야한다
- 반환 타입이 같아야한다 !
조상 클래스의 메서드를 자손 클래스에서 오버라이딩 하는 경우
- 접근 제어자를 조상 클래스 메서드보다 좁은 범위로 변경 x
- 예외는 조상 클래스의 메서드보다 많이 선언 x
- 인스턴스 메서드를 static 메서드 혹은 그 반대로 변경 x
2.3 오버로딩 vs 오버라이딩
오버로딩 : 기존에 없는 새로운 메서드를 정의 하는 것 new ! !
오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 change !!
2.4 super
- 자손 클래스에서 부모 클래스로부터 상속받은 멤버 참조하는 참조변수
2.5 super() 조상 클래스의 생성자
- super() 생성자 ... 조상 클래스의 생성자를 호출
Object 클래스 제외한 모든 클래스의 생성자 첫 줄엔 생성자.thsi() 혹은 super()를 호출해야함 그렇지 않으면 컴파일러가 자동적으로 super(); 를 생성자의 첫줄에 삽입하니까
클래스 : 어떤 클래스의 인스턴스를 생성할 것인가
생성자 : 선택한 클래스의 어떤 생성자를 이용해서 인스턴스를 생성할 것인가