[JAVA] INHERITANCE

μ„±μž₯일기·2024λ…„ 7μ›” 22일
0

[SWCAMP] JAVA

λͺ©λ‘ 보기
8/16

상속

πŸ’‘ λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ κ°€μ§€λŠ” 멀버(ν•„λ“œ, λ©”μ†Œλ“œ)λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ € λ°›μ•„ μžμ‹ μ˜ 멀버인 κ²ƒμ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“  κΈ°μˆ μ΄λ‹€.(단, μƒμ„±μžλŠ” λ¬Όλ € λ°›μ§€ μ•ŠμŒ)
멀버 외에도 λΆ€λͺ¨ 클래슀의 νƒ€μž… λ˜ν•œ 상속이 λœλ‹€.(λ‹€ν˜•μ„±μ˜ ν† λŒ€)
μžλ°”λŠ” 단일상속(μžμ‹ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ λΆ€λͺ¨ 클래슀만 κ°€μ§€λŠ”)만 μ§€μ›ν•œλ‹€.

  • μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀λ₯Ό 상속받기 μœ„ν•΄μ„œλŠ” extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
public class Academy extends Company {

}

상속을 μ‚¬μš©ν•˜λŠ” 이유

πŸ’‘ 기쑴에 μž‘μ„± 된 클래슀의 멀버λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€.
클래슀 κ°„ 계측 관계λ₯Ό ν˜•μ„±ν•˜μ—¬ λ‹€ν˜•μ„± λ¬Έλ²•μ˜ ν† λŒ€κ°€ λœλ‹€.

  • 상속을 ν•„μš”ν•œ μˆœκ°„μ— 잘 μ‚¬μš©ν•˜λ©΄ μœ μ§€λ³΄μˆ˜μ—λ„ 도움이 λ˜μ§€λ§Œ λ¬΄λΆ„λ³„ν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ 되렀 계측 ꡬ쑰 νŒŒμ•… 및 정상 λ™μž‘μ„ μ˜ˆμΈ‘ν•˜κΈ° νž˜λ“€μ–΄ μœ μ§€λ³΄μˆ˜μ— 되렀 어렀움을 μ΄ˆλž˜ν•  수 μžˆλ‹€.

μƒμ†μ˜ ν‚€μ›Œλ“œ

IS-A

πŸ’‘ β€œμžμ‹ ν΄λž˜μŠ€λŠ” (ν•˜λ‚˜μ˜)λΆ€λͺ¨ ν΄λž˜μŠ€μ΄λ‹€.β€λΌλŠ” 말을 만쑱(성립)ν•˜λŠ” 관계λ₯Ό λœ»ν•˜λ©° 클래슀 κ°„ 상속 관계λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•œ ν‚€μ›Œλ“œμ΄λ‹€.

  • Circle is a Shape
    원은 ν•˜λ‚˜μ˜ λͺ¨μ–‘이닀.

super와 super()

πŸ’‘ μΈμŠ€ν„΄μŠ€ 생성 μ‹œ λΆ€λͺ¨ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ—¬ λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€λ„ ν•¨κ»˜ μƒμ„±ν•˜κ²Œ λ˜λŠ”λ°, 이 λ•Œ μƒμ„±ν•œ λΆ€λͺ¨ μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œλ₯Ό λ³΄κ΄€ν•˜λŠ” 레퍼런슀 λ³€μˆ˜λ‘œ μžμ‹ 클래슀 λ‚΄μ˜ λͺ¨λ“  μƒμ„±μžμ™€ λ©”μ†Œλ“œ λ‚΄μ—μ„œ λ¬΅μ‹œμ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 레퍼런슀 λ³€μˆ˜μ΄λ‹€.

@Override
public String getInformation() {

	return super.getInformation()
			+ "Computer ["
			+ "cpu=" + this.cpu
			+ ", hdd=" + this.hdd
			+ ", ram=" + this.ram
			+ ", operationSystem=" + this.operationSystem
			+ "]";
}

πŸ’‘ super()λŠ” λΆ€λͺ¨ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” ꡬ문으둜 μΈμžμ™€ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, 갯수, μˆœμ„œκ°€ μΌμΉ˜ν•˜λŠ” λΆ€λͺ¨μ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€. super()λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ κ°€μ§€λŠ” private μƒμ„±μžλ₯Ό μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  수 μžˆλ„λ‘ ν•œ ꡬ문이닀.

public Computer(String cpu, int hdd, int ram, String operationSystem) {
		
		/* λΆ€λͺ¨ν΄λž˜μŠ€μ˜ κΈ°λ³Έμƒμ„±μž 호좜 */
		super();
		
		this.cpu = cpu;
		this.hdd = hdd;
		this.ram = ram;
		this.operationSystem = operationSystem;
}

μ˜€λ²„λΌμ΄λ”©(Overriding)

πŸ’‘ λΆ€λͺ¨ν΄λž˜μŠ€μ—μ„œ 상속받은 λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° μœ„ν•œ 기술

  • μ˜€λ²„λΌμ΄λ”© 성립 쑰건
    1. λ©”μ†Œλ“œλͺ… 동일
    2. λ©”μ†Œλ“œ λ¦¬ν„΄νƒ€μž… 동일
    3. λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, 개수, μˆœμ„œκ°€ 동일
    4. λΆ€λͺ¨ 클래슀의 private λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”© λΆˆκ°€λŠ₯
    5. λΆ€λͺ¨ 클래슀의 final ν‚€μ›Œλ“œκ°€ μ‚¬μš©λœ λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”© λΆˆκ°€λŠ₯
    6. μ ‘κ·Όμ œμ–΄μžλŠ” λΆ€λͺ¨ λ©”μ†Œλ“œμ™€ κ°™κ±°λ‚˜ 더 넓은 λ²”μœ„μ—¬μ•Ό 함
    7. μ˜ˆμ™Έμ²˜λ¦¬λŠ” 같은 μ˜ˆμ™Έμ΄κ±°λ‚˜ 더 ꡬ체적(ν•˜μœ„)인 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•΄μ•Ό 함

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

profile
μ—”μ§€λ‹ˆμ–΄λ‘œμ˜ μ„±μž₯일지

0개의 λŒ“κΈ€