MapleStory Finger Point

🟀 JAVA/πŸ“šλͺ…ν’ˆ JAVA_ESSENTIAL

(κ°œλ…) 상속 - λͺ…ν’ˆ JAVA ESSENTIAL

HYEJU01 2024. 4. 9. 03:01

상속 ν•„μš”μ„±

  1. 클래슀 쀑볡 μž‘μ„± 제거 κ°„κ²°ν™”
  2. 클래슀 계측별 관리 용이
  3. 클래슀 μž¬μ‚¬μš©/ν™•μž₯을 ν†΅ν•œ 생산성 ν–₯상

상속 - extends ν‚€μ›Œλ“œ

class ColorPoint extends Point { }

  • μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ 슈퍼클래슀 μ ‘κ·Ό κ°€λŠ₯(private멀버 μ œμ™Έ)

상속 νŠΉμ§•

  1. 닀쀑 상속 지원 XX (μΈν„°νŽ˜μ΄μŠ€λŠ” κ°€λŠ₯)
  2. ogject 클래슀λ₯Ό μžλ™μœΌλ‘œ 상속 λ°›λŠ”λ‹€. μœ μΌν•˜κ²Œ 슈퍼클래슀λ₯Ό 가지지 μ•ŠλŠ” 클래슀.

슈퍼/μ„œλΈŒ 클래슀의 μƒμ„±μž

  • ν˜ΈμΆœμ€ μ„œλΈŒν΄λž˜μŠ€κ°€ λ¨Όμ €, 싀행은 슈퍼클래슀 μƒμ„±μžκ°€ λ¨Όμ €
  • 슈퍼/μ„œλΈŒ μƒμ„±μž λ‘˜λ‹€ 싀행됨

슈퍼/μ„œλΈŒ 클래슀의 μƒμ„±μž 선택 (λ¬΅μ‹œμ 

  • μ„œλΈŒν΄λž˜μŠ€μ˜ μƒμ„±μžκ°€ 슈퍼 클래슀 μƒμ„±μžλ‘œ κΈ°λ³Έ μƒμ„±μž 선택됨 (by μžλ°”μ»΄νŒŒμΌλŸ¬)

슈퍼/μ„œλΈŒ 클래슀의 μƒμ„±μž 선택 (λͺ…μ‹œμ 

super() : 슈퍼클래슀 μƒμ„±μžμ˜ 호좜 (첫쀄에 와야함)

μΊμŠ€νŒ…

νƒ€μž…λ³€ν™˜

μ—…μΊμŠ€νŒ…

μ„œλΈŒν΄λž˜μŠ€ -> 슈퍼클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜λ˜λŠ” 것

슈퍼클래슀 λ ˆνΌλŸ°μŠ€κ°€ μ„œλΈŒ 클래슀 객체λ₯Ό 가리킀도둝 μΉ˜ν™˜ν•˜λŠ” 것

Person p;

Student s = new Student();

p = s;

  • 슈퍼클래슀의 λ©€λ²„λ§Œ μ ‘κ·Ό κ°€λŠ₯
  • 속성이 잠깐 κ°€λ €μ ΈμžˆμŒ, λ‹€μš΄μΊμŠ€νŒ…μ‹œ 볡ꡬ κ°€λŠ₯
  • λͺ…μ‹œμ νƒ€μž…λ³€ν™˜μ„ ν•˜μ§€μ•Šμ•„λ„λœλ‹€. p =(Person) s;

λ‹€μš΄μΊμŠ€νŒ…

μ—…μΊμŠ€νŒ… 된 것을 μ›λž˜λŒ€λ‘œ λ˜λŒλ¦¬λŠ” 것

Person p = new Student();

  • λͺ…μ‹œμ νƒ€μž…λ³€ν™˜ ν•„μˆ˜ !! Student s = (Student)p;

instanceof μ—°μ‚°μž (이항 μ—°μ‚°μž)

객체의 μ§„μ§œ 클래슀 νƒ€μž… ꡬ뢄을 μœ„ν•œ μ—°μ‚°μž

객체레퍼런슀 instanceof ν΄λž˜μŠ€νƒ€μž… ⇒ T or F 둜 λ°˜ν™˜

λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©

μŠˆνΌν΄λž˜μŠ€μ— μ„ μ–Έλœ λ©”μ†Œλ“œλ₯Ό 쀑볡 μž‘μ„±ν•˜μ—¬ 슈퍼클래슀 λ©”μ†Œλ“œλ₯Ό 무λ ₯ν™”

  • @Override ν‘œκΈ°
  • 항상 μ„œλΈŒν΄λž˜μŠ€μ˜ μ˜€λ²„λΌμ΄λ”©ν•œ λ©”μ†Œλ“œκ°€ 싀행됨
  • 이름, λ¦¬ν„΄νƒ€μž…, λ§€κ°œλ³€μˆ˜λ¦¬μŠ€νŠΈ λͺ¨λ‘ 같도둝 μž‘μ„±

μ˜€λ²„λΌμ΄λ”© λͺ©μ  (λ‹€ν˜•μ„± μ‹€ν˜„)

  • ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ— μ„œλ‘œ λ‹€λ₯Έ λ‚΄μš© κ΅¬ν˜„

동적 바인딩

μ‹€ν–‰ν•  λ©”μ†Œλ“œλ₯Ό μ»΄νŒŒμΌμ‹œ κ²°μ •ν•˜μ§€ μ•Šκ³  runtime μ‹€ν–‰μ‹œ κ²°μ •ν•˜λŠ” 것

μ˜€λ²„λΌμ΄λ”© 된 λ©”μ†Œλ“œκ°€ 항상싀행!! λ˜λ„λ‘ 보μž₯ν•œλ‹€.

정적 바인딩 - super ν‚€μ›Œλ“œ

super ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•΄μ„œ 슈퍼 클래슀 멀버에 μ ‘κ·Ό κ°€λŠ₯.

μ˜€λ²„λ‘œλ”© / μ˜€λ²„λΌμ΄λ”©

μ˜€λ²„λ‘œλ”© - ν•œ 클래슀/상속 관계에 μžˆλŠ” ν΄λž˜μŠ€μ— λ§€κ°œλ³€μˆ˜ νƒ€μž…-κ°œμˆ˜κ°€ λ‹€λ₯Έ μ—¬λŸ¬κ°œμ˜ λ©”μ†Œλ“œκ°€ 같은 μ΄λ¦„μœΌλ‘œ μžˆλŠ” 것 ( 쀑볡 μž‘μ„±)

μ˜€λ²„λΌμ΄λ”© - 슈퍼클래슀의 λ©”μ†Œλ“œ(이름,νƒ€μž…λ“±)λ₯Ό λ™μΌν•˜κ²Œ μ„œλΈŒν΄λž˜μŠ€μ— 가져와 μž¬μ •μ˜ν•œ 것 (μž¬μž‘μ„±)

좔상 λ©”μ†Œλ“œ (= λ°‘κ·Έλ¦Ό)

abstract ν‚€μ›Œλ“œ + μ›ν˜•λ§Œ μ„ μ–Έ (λ©”μ†Œλ“œμ˜ ν—€λ”λ§Œ)

좔상 클래슀

  1. 좔상 λ©”μ†Œλ“œλ₯Ό μ΅œμ†Œ ν•œκ°œ 가지고 abstract 둜 μ„ μ–Έλœ 클래슀 → 무쑰건 좔상 클래슀둜 μ„ μ–Έλ˜μ–΄μ•Όν•œλ‹€.
  2. 좔상 λ©”μ†Œλ“œκ°€ 없어도 abstract 둜 μ„ μ–Έλœ 클래슀
  • 좔상 클래슀의 μΈμŠ€ν„΄μŠ€(객체) 생성 λΆˆκ°€ → 컴파일 였λ₯˜

μΆ”μƒν΄λž˜μŠ€ 상속

  1. 좔상 클래슀(μΆ”μƒλ©”μ†Œλ“œ 보유)λ₯Ό 상속 λ°›μœΌλ©΄
  2. μ„œλΈŒν΄λž˜μŠ€λŠ” μžλ™μœΌλ‘œ 좔상 클래슀 (μΆ”μƒλ©”μ†Œλ“œλ₯Ό λ°›κΈ°λ•Œλ¬Έ)
  3. 즉 , μ„œλΈŒν΄λž˜μŠ€μ— abstract λ₯Ό λͺ…μ‹œν•΄μ•Όν•¨

좔상 클래슀 κ΅¬ν˜„ (= 본체 λ§Œλ“€κΈ°)

  • μ„œλΈŒμ—μ„œ 슈퍼의 λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•˜μ—¬ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ‘œ κ΅¬ν˜„ν•˜λŠ” 것
  • μ„œλΈŒκ°€ 좔상 클래슀λ₯Ό κ΅¬ν˜„ν–ˆλ‹€λ©΄, μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

μΆ”μƒν΄λž˜μŠ€ λͺ©μ  (μ„œλΈŒν΄λž˜μŠ€ λ‹€ν˜•μ„± μ‹€ν˜„)

  • 상속을 μœ„ν•œ 슈퍼클래슀둜 ν™œμš©ν•˜κΈ° μœ„ν•œ 것 → μ„œλΈŒκ°€ 상속할 클래슀 μ›ν˜•(λ°‘κ·Έλ¦Ό)을 제곡

μΈν„°νŽ˜μ΄μŠ€ - interface ν‚€μ›Œλ“œ

μ„œλ‘œ λ‹€λ₯Έ ν•˜λ“œμ›¨μ–΄ μž₯μΉ˜λ“€μ΄ μƒν˜Έ 데이터λ₯Ό μ£Όκ³  받을 수 μžˆλŠ” 규격

클래슀λ₯Ό μ„ μ–Έν•˜λ“―μ΄ μ„ μ–Έν•œλ‹€.

  • ν•„λ“œ(멀버 λ³€μˆ˜)λ₯Ό λ§Œλ“€ 수 μ—†μŒ
  • 객체λ₯Ό 생성할 수 μ—†λ‹€ → 였λ₯˜

μΈν„°νŽ˜μ΄μŠ€ 멀버 5μ’…λ₯˜

  1. μƒμˆ˜
  2. μΆ”μƒλ©”μ†Œλ“œ (public abstract μƒλž΅ κ°€λŠ₯, ν—·κ°ˆλ¦¬μ§€μ•Šκ²Œ 주의!)
  3. default λ©”μ†Œλ“œ (public μƒλž΅ κ°€λŠ₯)
  4. private λ©”μ†Œλ“œ
  5. static λ©”μ†Œλ“œ

μΈν„°νŽ˜μ΄μŠ€ 상속 - extends ν‚€μ›Œλ“œ

  • λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속 ν• μˆ˜ μžˆλ‹€.
  • 닀쀑 상속 κ°€λŠ₯ (, 콀마둜 μ—°κ²°)

μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ - impliments ν‚€μ›Œλ“œ

  • μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•œ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것