ㅇTL

Chap 7. Inheritance (상속) 본문

2-1/객체지향 - java

Chap 7. Inheritance (상속)

정노르레기 2022. 4. 12. 00:43

= OOP 의 기본 개념 (encapsulation & inheritance)

= 어떤 class에서 새 class를 만드는 것

-> 자식 class는 부모 class의 모든 것들을 가지고 잇고 추가로 만들 수 있음

-> hierarchy 가 생긴다 ; 공통인 특징을 가지고 있고 어떤 애들은 각자 세분화된 특징을 가지고 있다

parent class = base class = super class -> child class = derived class

- 상속은 반복될 수 잇다 -> child도 다른 애의 parent가 될 수 ㅇ

- 부모측 = ancestor , 자식측 = descendent

 

• 상속 하는 방법

public class classname extends parentName { } 

 

 instances : 그대로 ! 똑같은거 또 정의할 필요x

 methods -> Overriding 가능 ! (재정의)

: derived class에서 부모에 잇던 함수 override 가능 ! (재정의)

 

* overriding: 상속 class에서 함수 재정의하는 것(아예 동일한 함수. 이름,param같음)

   overloading : 함수 이름이 같을 때 parameter 다른거 ! (둘은 다른 함수 !!)

 

 final modifer ; 최종이다 !

- class : 상속할 수 없다 derived class만들기 불가 ~

- method : child 에서 redefine 될 수 없다 (오버라이딩 불가)

 

super

- super constructor : base class의 constructor 가 불린다 !

-> derived class에서 constructor에서는 위의 부모 클래스 값들은 이 super 이용해서 초기화 해주어야 함 !

- derived class constructor 에서 super constructor 을 쓰지 않으면

-> no-argument 부모 constructor를 자동으로 시행해줌 !

( no-argument constructor 없으면.. ㅃㅇ 에러남 ~ )

** 절대 ! 부모 class의 이름을 사용하여 constructor 호출하면 안됨 ! super 써야함 !

 

부모의 함수 불러올 때 그냥 super.함수 이렇게 하면 됨 ! (오버라이드할때 같은이름의 부모 함수 불러올 때 super.함수이름() 하면됨)

derived class 내부 이후에는, 외부에서는 더이상 부모의 함수들에 접근할 수 없다 ! super이런거 쓸 수 없다 !

 

 

• this constructor

: constructor 안에서 해당 class의 다른 constructor을 부를 때 ! -> this (~)

( parameter 맞는거가 자동으로 call 돼서 쓰임)

-> no-argument 에서 잘 이용됨

* this와 super을 둘다 써야한다면?

this로 다른 컨스트럭터를 부르고 해당 불리는 컨스트럭터 안에 super을 넣는다 !

 

• private

instance & method가 private 

-> derived class에서 사용 불가!! 걍 해당 클래스 내부에서만 사용가능한 것

 

• protected

: child 내부에서는 access 가능한 것

- 클래스 자체 내부

- child 클래스 내부

- 동일한 패키지에 속한 모든 class (자바에서 추가됨 !!)

에서 access 가능 !!

* 너무 다양하게사용가능함 -> 그리 조은 방법이 아닐 수 잇음 !

 

 Package access

instance variable이나 method가 modifier 갖지 않음 ! (안씀. 걍 int=3 이런식으로 함)

-> package access를 갖는다 !

= 동일한 패키지 내에 잇는 클래스간에는 access를 허용한다 ! (패키지 밖에서는 불가)

 

 


여기까지가 상속의 기본적인 이야기

-> 이제 상속을 이용해 standard java lib class를 enhance 한다 !!

 

StringTokenizer Class

; inheritance를 이용해 이 class를 enhance 함 !

 

StringTokenizer Class = 주어진 스트링의 토큰을 하나하나씩 잘라내는 것

- java.util이라는 package에 잇음  -> import java.util.StringTokenizer

~ some methods ~

 

* 문제 ; 여러번 순회하면 ? 계속 object 만들어서 해야하나요 ?

-> 새 클래스 만듦 ! EnhancedStringTokenizer

- 새 method ; tokenSoFar 추가

- nextToken 오버라이드 

 


Object class !

; 자바의 모든 클래스는 object class의 자식 클래스임 ! 제일 상위에 있다

아무것도 상속하지 않은 class -> 그 클래스의 parent class는 자동으로 object 가 됨 !

- java.lang이라는 패키지에 들어잇다

- 모든 클래스의 ancestor class

-> 함수의 매개변수를 Object로 하면 모든 타입의 class 다 넣을 수 있다 !

 

포함 메소드 (->모든 클래스에게 이 함수 존재함 ^^)

: equals, to String  -> 각 클래스에 맞게 overriding 

1. equals -> 두 오브젝트 내용이 같은지 !

 

 

두 함수는 같지 않음 -> 저렇게 하면 오버라이딩이 아니라 overload

-> 두번째꺼 써서 오버라이딩을 해야함 !!

!!

1. null이면 false

2. 클래스 다르면 false

3. 형변환 -> 같은지 리턴

 

 

* 저 코드에서 getClass() 이거는 해당 클래스안에 무조건 내장되어 있으므로 그냥 getClass 이렇게 쓰면 됨

* instanceof 오면 저렇게 됨 (testH는 true, testE는 false)

hourly가 더 자식

instance of & getClass

-> 클래스를 체크하는 데 사용, getClass 가 더 정확

 

 instanceof Operaator

object instanceof ClassName -> object가 ClassName이면 true 반환함

* 이때 object가 ClassName의 하위 클래스여도 true 리턴함 !

ex) ob=고양이, ClassName=동물 이여도 true !

 

 getClass

- Object class 내에 정의되어잇다 -> 모든 클래스는 이 함수 가지고 잇다 (이함수= final -> 오버라이딩 불가)

- 객체.getClass() 하면 new할때 쓰는 그 클래스 오브젝트 리턴함 ! (상속된 그런거도 말고 바로 그 class)

 

'2-1 > 객체지향 - java' 카테고리의 다른 글

Chap 9. Exception handling  (0) 2022.05.30
Polymorphism and abstract classes  (0) 2022.04.20
Chap 6. Arrays ..  (0) 2022.04.06
Chap5-2  (0) 2022.04.04
chap 4. class  (0) 2022.04.02