Day 18(21.09.30) - Gomserker/Java-101 GitHub Wiki

β€» μ˜€λŠ˜μ€ μ „μ²΄μ μœΌλ‘œ 배운 λ‚΄μš©λ“€μ„ λ˜μ§šμ–΄λ³΄λŠ” λ‚ μ΄μ—ˆκΈ°μ—, κ³΅λΆ€ν•˜λ©° 이해가 λΆ€μ‘±ν–ˆμ—ˆλ˜ 뢀뢄을 λ‹€μ‹œ μ§šμ–΄λ³΄κ³ μž ν•œλ‹€.

25. μžλ™ νƒ€μž… λ³€ν™˜(Promotion) in 상속

(1) μžλ™ νƒ€μž… λ³€ν™˜(Promotion)μ΄λž€?

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 μžλ™μœΌλ‘œ νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ” 것을 λ§ν•˜λŠ”λ°, μ•„λž˜μ™€ 같이 μ‚¬μš©λœλ‹€.

λΆ€λͺ¨ν΄λž˜μŠ€ λ³€μˆ˜ = μžμ‹ν΄λž˜μŠ€νƒ€μž…;

μœ„μ™€ 같이 μ‚¬μš©ν–ˆμ„ λ•Œ, μžμ‹μ€ λΆ€λͺ¨μ˜ νŠΉμ§•κ³Ό κΈ°λŠ₯을 상속받기 λ•Œλ¬Έμ— λΆ€λͺ¨μ™€ λ™μΌν•œ 취급을 λ°›κ²Œ λœλ‹€. μ•„λž˜ μ˜ˆμ‹œμ—μ„œ μ‚΄νŽ΄λ³΄μž.

public class Parent {
    public void method1() {
	System.out.println("Parent-method1()");
	}
	
    public void method2() {
	System.out.println("Parent-method2()");
	}
}
public class Child extends Parent{
	@Override
	public void method2() {
		System.out.println("Child-method2()");
	}
	
	public void method3() {
		System.out.println("Child-method3()");
	}
}
public class ChildExample {
    public static void main(String[] args) {
	Child child = new Child();
		
	Parent parent = child; // but, μžλ™ νƒ€μž… λ³€ν™˜ μ‹€ν–‰ (Child to Parent)
	parent.method1();
	parent.method2();
		
	System.out.println(parent == child);
	parent.method3(); // 컴파일 μ—λŸ¬
		
		
	}
}

Result

Parent-method1()
Child-method2()
true

μ—¬κΈ°μ„œ parent μ°Έμ‘°λ³€μˆ˜κ°€ Parent νƒ€μž…μ΄λ‹ˆ λ‹Ήμ—°νžˆ Parnet μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜λŠ” 것이 λ§žλŠ” κ²ƒμœΌλ‘œ 보일 수 μžˆμœΌλ‚˜, μœ„ κ²°κ³Όμ—μ„œ 확인할 수 μžˆλ“―μ΄ parent 뿐만 μ•„λ‹ˆλΌ child μ°Έμ‘°λ³€μˆ˜λ„ λ™μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€λŠ” 것을 λ³Ό 수 μžˆλ‹€. μ΄λ ‡κ²Œ Child μΈμŠ€ν„΄μŠ€κ°€ Parent λ³€μˆ˜μ— λŒ€μž…λ˜μ–΄ μžλ™ν˜•λ³€ν™˜ 된 것이닀.
그리고, μžλ™νƒ€μž…λ³€ν™˜μ˜ μ€‘μš”ν•œ νŠΉμ§•μ€, μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™μœΌλ‘œ λ³€ν™˜λœ μ΄ν›„μ—λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ†Œλ“œμ—λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€λŠ” 것이닀. λ³€μˆ˜λŠ” μžμ‹ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•˜μ§€λ§Œ λ³€μˆ˜λ‘œμ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ λ©€λ²„λŠ” λΆ€λͺ¨ 클래슀 λ©€λ²„λ‘œλ§Œ ν•œμ •λœλ‹€λŠ” 뜻인데, μœ„ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄, μžμ‹ ν΄λž˜μŠ€μ—λ§Œ μžˆλŠ” method3()λ₯Ό ν˜ΈμΆœν•˜λ €κ³  ν•˜λ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. λ‹€λ§Œ, μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜(Override)된 λ©”μ†Œλ“œκ°€ μžˆλ‹€λ©΄ μžμ‹ 클래슀의 λ©”μ†Œλ“œκ°€ λŒ€μ‹  ν˜ΈμΆœλœλ‹€.