λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ—‚.λŒ€μ™Έν™œλ™/πŸ“.μΉ΄μΉ΄μ˜€ν΄λΌμš°λ“œμŠ€μΏ¨

[JAVA] ν˜• λ³€ν™˜

by πŸ’Ύκ³ κ΅¬λ§ˆλ§›νƒ•λ¨Ήκ³ μ‹Άλ‹€ 2023. 12. 16.
728x90

🎊 κΈ°λ³Έν˜•μ˜ ν˜• λ³€ν™˜

boolean을 μ œμ™Έν•œ κΈ°λ³Έν˜• λ³€μˆ˜μ˜ νƒ€μž…μ„ 자유둭게 ν˜• λ³€ν™˜ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

🎊 μ°Έμ‘°ν˜•μ˜ ν˜• λ³€ν™˜

μ„œλ‘œ λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ ν˜Έν™˜μ΄ κ°€λŠ₯ν•œκ°€?

Student student = new Member(); // ??? κ°€λŠ₯ν•œκ°€?
student.sname; // X μ‚¬μš© λΆˆκ°€

μ›μΉ™μ μœΌλ‘œ (μ˜ˆμ™ΈμžˆμŒ) μ°Έμ‘°ν˜•λΌλ¦¬μ˜ ν˜• λ³€ν™˜ μ•ˆλœλ‹€. κ΅¬μ„±μš”μ†Œκ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ΄λ‹€.

ν•˜μ§€λ§Œ 상속 κ΄€κ³„μ˜ 클래슀(μ°Έμ‘°ν˜•) 간에 ν˜• λ³€ν™˜μ„ μ§€μ›ν•œλ‹€. 슈퍼클래슀의 κ΅¬μ„±μš”μ†Œλ₯Ό λͺ¨λ‘ 가지고 있기 λ•Œλ¬Έμ— μ—…μΊμŠ€νŒ…μ— ν•œν•΄μ„œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€. λ³„λ„μ˜ λͺ…λ Ήμ–΄ 없이 암묡적(μžλ™)으둜 지원이 λœλ‹€.

Duck dk = (Duck) new RedDuck();

 

μ—…μΊμŠ€νŒ…μ΄ λ°œμƒν•˜λ©΄, μ„œλΈŒν΄λž˜μŠ€μ—μ„œ ν™•μž₯ν•œ λ³€μˆ˜, λ©”μ†Œλ“œ 등을 μ‚¬μš©ν•  수 μ—†λ‹€. ν•˜μ§€λ§Œ μ˜€λ²„λΌμ΄λ“œν•œ λ©”μ†Œλ“œλŠ” μ„œλΈŒν΄λž˜μŠ€μ˜ λ©”μ†Œλ“œλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. μ™œλƒν•˜λ©΄ μ˜€λ²„λΌμ΄λ“œκ°€ λ°œμƒν•˜λ©΄ 슈퍼 클래슀의 원 λ©”μ†Œλ“œλŠ” not visible μƒνƒœλ‘œ λ°”λ€Œμ–΄μ„œ μ„œλΈŒ 클래슀의 λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλœλ‹€.

 

ν•˜μ§€λ§Œ μ˜ˆμ™Έμ μœΌλ‘œ, λ‹€μš΄ μΊμŠ€νŒ…μ„ μ§€μ›ν•œλ‹€. μ „μ œμ‘°κ±΄μ€ 이전에 μ—…μΊμŠ€νŒ…μ„ ν•œ κ²½μš°μ΄λ‹€. 단 λͺ…μ‹œμ  ν˜•λ³€ν™˜μ„ ν•΄μ•Ό ν•œλ‹€.

RedDuck rdk = (RedDuck) duck;

 

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

μ„œλΈŒ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 슈퍼 클래슀의 μ°Έμ‘°λ³€μˆ˜(dk)둜 가리킀도둝 ν˜•μ„ λ³€ν™˜ν•œ 것이닀.

Duck dk = new RedDuck();

 

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

슈퍼 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ„œλΈŒ 클래슀의 μ°Έμ‘° λ³€μˆ˜(rdk)둜 가리킀도둝 ν˜•μ„ λ³€ν™˜ν•œ 것이닀. μžλ°”μ—μ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

RedDuck rdk = new Duck();

 

 

728x90