Search

상속

상속 (Inheritance)

λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ •μ˜λœ λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ¬Όλ €λ°›μ•„ μž¬μ‚¬μš©ν•˜λŠ” 것

INDEX

μƒμ†μ˜ κΈ°λ³Έ κ°œλ…

상속을 톡해 기쑴에 μž‘μ„±λœ 클래슀(λΆ€λͺ¨ 클래슀/μƒμœ„ 클래슀/기반 클래슀)의 κΈ°λŠ₯을 κ·ΈλŒ€λ‘œ λ¬Όλ €λ°›μœΌλ©΄μ„œ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ κΈ°μ‘΄ κΈ°λŠ₯을 μˆ˜μ •ν•  수 μžˆλŠ” μƒˆλ‘œμš΄ 클래슀(μžμ‹ 클래슀/ν•˜μœ„ 클래슀/νŒŒμƒ 클래슀)λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
// λΆ€λͺ¨ 클래슀 class Parent { String name; void display() { System.out.println("λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œ"); } } // μžμ‹ 클래슀 - Parent 클래슀λ₯Ό 상속 class Child extends Parent { int age; void showInfo() { System.out.println("이름: " + name + ", λ‚˜μ΄: " + age); } }
Java
볡사

μƒμ†μ˜ νŠΉμ§•

νŠΉμ§•
μ„€λͺ…
μ½”λ“œ μž¬μ‚¬μš©μ„±
이미 μž‘μ„±λœ 클래슀의 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ 개발 μ‹œκ°„ 단좕
ν™•μž₯μ„±
κΈ°μ‘΄ 클래슀λ₯Ό ν™•μž₯ν•˜μ—¬ μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€ κ°€λŠ₯
μœ μ§€λ³΄μˆ˜μ„±
곡톡 κΈ°λŠ₯을 μƒμœ„ ν΄λž˜μŠ€μ— μž‘μ„±ν•˜μ—¬ μ½”λ“œ 쀑볡 방지
λ‹€ν˜•μ„± κ΅¬ν˜„
상속은 λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 기반이 됨

μžλ°” μƒμ†μ˜ νŠΉμ§•

νŠΉμ§•
μ„€λͺ…
단일 μƒμ†λ§Œ 지원
μžλ°”λŠ” 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠμŒ (ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ 클래슀만 상속 κ°€λŠ₯)
λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object 클래슀λ₯Ό 상속
μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” λͺ…μ‹œμ μœΌλ‘œ μƒμ†ν•˜μ§€ μ•Šλ”λΌλ„ μžλ™μœΌλ‘œ Object 클래슀λ₯Ό 상속
extends ν‚€μ›Œλ“œ μ‚¬μš©
상속을 κ΅¬ν˜„ν•  λ•Œ 'extends' ν‚€μ›Œλ“œ μ‚¬μš©

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

μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” 것
class Parent { void display() { System.out.println("λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œ"); } } class Child extends Parent { // λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”© @Override void display() { System.out.println("μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•œ λ©”μ„œλ“œ"); } }
Java
볡사

super ν‚€μ›Œλ“œ

μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 멀버에 μ ‘κ·Όν•  λ•Œ 'super' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
class Child extends Parent { @Override void display() { super.display(); // λΆ€λͺ¨ 클래슀의 display() λ©”μ„œλ“œ 호좜 System.out.println("μžμ‹ 클래슀의 μΆ”κ°€ λ™μž‘"); } }
Java
볡사

super() λ©”μ†Œλ“œ

λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ
β€’
μžμ‹ 클래슀의 μƒμ„±μžμ—μ„œ λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό 호좜 μ‹œ, λ°˜λ“œμ‹œ 첫 번째 μ€„μ—μ„œ ν˜ΈμΆœν•΄μ•Όν•œλ‹€.
β€’
μƒλž΅ μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μ‚½μž…ν•©λ‹ˆλ‹€.
β—¦
μžμ‹ 클래슀의 μƒμ„±μž 첫 μ€„μ—λŠ” μˆ¨κ²¨μ§„ super(); κ°€ μžˆλ‹€.
β€’
super λ©”μ†Œλ“œ 호좜 μΌ€μ΄μŠ€
β—¦
μƒλž΅ : super() μžλ™ 호좜
β—¦
super() : λΆ€λͺ¨ κΈ°λ³Έ μƒμ„±μž 호좜
β—¦
super( x ) : λΆ€λͺ¨ λ§€κ°œλ³€μˆ˜ μƒμ„±μž 호좜
class Parent { Parent() { System.out.println("λΆ€λͺ¨ 클래슀 μƒμ„±μž"); } } class Child extends Parent { Child() { super(); // λΆ€λͺ¨ 클래슀의 μƒμ„±μž 호좜 System.out.println("μžμ‹ 클래슀 μƒμ„±μž"); } }
Java
볡사

상속과 μƒμ„±μž

μžμ‹ 클래슀의 객체가 생성될 λ•Œ, λΆ€λͺ¨ 클래슀의 μƒμ„±μžκ°€ λ¨Όμ € μ‹€ν–‰λœ ν›„ μžμ‹ 클래슀의 μƒμ„±μžκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
class Parent { Parent() { System.out.println("1. λΆ€λͺ¨ 클래슀 μƒμ„±μž μ‹€ν–‰"); } } class Child extends Parent { Child() { // super()κ°€ μƒλž΅λ˜μ–΄ 있음 System.out.println("2. μžμ‹ 클래슀 μƒμ„±μž μ‹€ν–‰"); } } public class Main { public static void main(String[] args) { Child child = new Child(); } } // μ‹€ν–‰ κ²°κ³Ό: // 1. λΆ€λͺ¨ 클래슀 μƒμ„±μž μ‹€ν–‰ // 2. μžμ‹ 클래슀 μƒμ„±μž μ‹€ν–‰
Java
볡사
β€’
μ΄λŸ¬ν•œ μ‹€ν–‰ μˆœμ„œλŠ” 객체의 μ™„μ „ν•œ μ΄ˆκΈ°ν™”λ₯Ό 보μž₯ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€.
β€’
λΆ€λͺ¨μ˜ 멀버가 λ¨Όμ € μ΄ˆκΈ°ν™”λœ ν›„, μžμ‹μ˜ 멀버가 μ΄ˆκΈ°ν™”λ˜μ–΄μ•Ό μ•ˆμ „ν•œ 객체 생성이 κ°€λŠ₯ν•©λ‹ˆλ‹€.