= 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 |