4.7 super
4.7.1 superÂüÁ¶º¯¼ö
super ÂüÁ¶º¯¼ö¶õ »ó¼Ó±¸Á¶¿¡¼ µðÀÚÀΟÀÓ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â »óÀ§ Ŭ·¡½ºÀÇ ÂüÁ¶ º¯¼öÀÔ´Ï´Ù. »óÀ§ Ŭ·¡½º¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù.
4.7.2 super¸¦ ÀÌ¿ëÇÏ¿© »óÀ§ Ŭ·¡½º¸¦ ÂüÁ¶
¾Æ¹öÁöÀÇ Å¬·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Ò´Ù¸é ¾Æ¹öÁöŬ·¡½ºÀÇ ¸ðµç °ÍÀº ¾Æµé Ŭ·¡½º °ÍÀÌ µË´Ï´Ù. ¾Æµé Ŭ·¡½º¿¡¼´Â ¾Æ¹öÁö °Íµµ ³» °ÍÀÌ¿ä, ³» °Íµµ ³» °ÍÀÌ´Ï this¶ó´Â Ű¿öµé »ç¿ë ÇØ¼ ¾Æ¹öÁöÀÇ ¸â¹ö¿¡ Á¢±Ù ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ¾Æ¹öÁöÀÇ publicÀ̳ª protectedÁ¢±Ù ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÏ´Â ¸â¹ö¿¡¸¸ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
À̰ÍÀº ³Ê¹«³ª ´ç¿¬ÇÑ »ó¼Ó °³³äÀÔ´Ï´Ù. ¾Æ¹öÁö Ŭ·¡½º¿Í ¾Æµé Ŭ·¡½ºÀÇ »ó¼Ó°ü°è¿¡¼ ÀçÁ¤ÀÇ ¸Þ¼µå°¡ ÀÖ°í ¾Æµé Ŭ·¡½º ³»ºÎ¿¡¼ ÀçÁ¤ÀÇ µÈ ¸Þ¼µå¸¦ È£ÃâÇÑ´Ù¸é, ¹«Á¶°Ç ¾ÆµéÀÇ ÀçÁ¤ÀÇ ¸Þ¼µå°¡ È£Ã⠵˴ϴÙ. ÀçÁ¤ÀÇ ÀÚü´Â ¾Æ¹öÁöÀÇ ¸Þ¼µå¸¦ ¹«½ÃÇϰí Àֱ⠶§¹®ÀÔ´Ï´Ù. ±×·±µ¥ ½ÇÁ¦·Î´Â ÀçÁ¤ÀÇ µÈ ¸Þ¼µå¿Í ¾Æ¹öÁöÀÇ ¹«½ÃµÇ¾îÁø ¸Þ¼µå 2°³°¡ Á¸ÀçÇÕ´Ï´Ù. ¾Æµé ÀÔÀå¿¡¼ ¾Æ¹öÁöÀÇ ¸Þ¼µå¸¦ È£Ãâ ÇϰíÀÚ ÇÑ´Ù¸é ¾î¶»°Ô ÇÒ±î¿ä?
³ª»Û ¾ÆµéÀÌÁÒ. ÀÚ½ÅÀÌ ÀçÁ¤ÀÇÇÑ ¾Æ¹öÁöÀÇ ¸Þ¼µå¸¦ È£Ãâ ÇÒ ¼ö ÀÖ°Ô ÇÒ ¸¸Å ¾Æ¹öÁö Ŭ·¡½º´Â ³Ê±×·¯¿ï±î¿ä? ¹«½ÃµÇ¾îÁø ¾Æ¹öÁöŬ·¡½ºÀÇ ¸Þ¼µå¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀÌ ¹Ù·Î superÂüÁ¶º¯¼ö¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. super´Â this¿Í °°Àº ¿ø¸®·Î µ¿ÀÛ µÇ¾îÁý´Ï´Ù. ±×·¡¼ superÀÚü´Â µðÀÚÀΟÀÓ¿¡ ¾Æ¹öÁö¸¦ ÂüÁ¶ÇÏ´Â À¯ÀÏÇÑ ÂüÁ¶º¯¼öÀÔ´Ï´Ù.
NewSon .java(super¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦) |
class NewFather{ public void overrideFunc(){ System.out.println("¾Æ¹öÁöÀÇ ÇÔ¼ö"); } } public class NewSon extends NewFather{ public void overrideFunc(){ System.out.println("¾ÆµéÀÇ ÀçÁ¤ÀÇ ÇÔ¼ö"); } public void testFunc(){ super.overrideFunc(); } public static void main(String[] args){ NewSon s = new NewSon(); s.overrideFunc();//ÀçÁ¤ÀÇ µÈ ÇÔ¼öÈ£Ãâ s.testFunc();//super¸¦ ÀÌ¿ëÇÑ ¾Æ¹öÁö È£Ãâ } } |
C:\examples\4. Class for Basic Java>javac NewSon.java C:\examples\4. Class for Basic Java>java NewSon ¾ÆµéÀÇ ÀçÁ¤ÀÇ ÇÔ¼ö |
»ó¼ÓÀ» ¾Æµé Ŭ·¡½º°¡ ¹Þ¾Ò´Ù°í ÇÑ´Ù¸é ¾Æ¹öÁö ¹«½ÃÇϱâ Áï, ƯÁ¤ ¸Þ¼µå¸¦ OverridingÇϰí ÀÖ´Â °ÍÀÔ´Ï´Ù. ´ç¿¬È÷ ¾Æ¹öÁö Ŭ·¡½ºÀÇ ¸Þ¼µå´Â ¾ÆµéŬ·¡½º¿Í °°Àº À̸§ÀÇ ¸Þ¼µå°¡ Á¸ÀçÇϱ⠶§¹®¿¡ ¾ÆµéÀÌ ÀÌ ¸Þ¼µå¸¦ »ç¿ëÇÏ¸é ¹«½ÃµÇ¾î Áý´Ï´Ù. ±×·¸´Ù¸é ¹«½ÃµÇ¾îÁø ¾Æ¹öÁöŬ·¡½ºÀÇ ¸Þ¼µå¸¦ »ç¿ëÇÏ°í ½Í´Ù¸é ¾î¶»°Ô ÇÒ±î¿ä? ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. ¹°·Ð ANSI C++¿¡¼µµ À̰Ϳ¡ ´ëÇÑ ÇØ°áÃ¥À» Á¦½ÃÇØ ÁÖ°í ÀÖÁö¸¸ ÀÚ¹Ù¿¡¼´Â super¶ó´Â Ű¿öµé Á¦°øÇØ ÁÖ´Â °ÍÀÔ´Ï´Ù.
public void testFunc(){ super.overrideFunc(); } |
testFunc()¸Þ¼µå¿¡¼ super¸¦ ÀÌ¿ëÇÏ¿© ¾Æ¹öÁöÀÇ ¸Þ¼µå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù. ÀÚ½ÅÀÇ ¸Þ¼µå¿Í ¾Æ¹öÁöÀÇ ¸Þ¼µå¸¦ ±¸ºÐÇϱâ À§Çؼ À̰ÍÀ» »ç¿ëÇÏ´Â °ÍÀÌÁö º°´Ù¸¥ °ÍÀº ¾ø½À´Ï´Ù
4.7.3 super¸¦ ÀÌ¿ëÇÑ »ý¼ºÀÚ¸Þ¼µå È£Ãâ
»ó¼ÓÀ» ¹Þ¾ÒÀ» °æ¿ì ¾Æ¹öÁöÀÇ Å¬·¡½ºÀÇ »ý¼ºÀÚ¸Þ¼µå°¡ ¸Å°³º¯¼ö¸¦ °¡Áö°í ÀÖ´Ù¸é ¾î¶»°Ô µÉ±î¿ä? Àß »ý°¢ÇØ º¸¸é ¾î·µç ¾Æ¹öÁöÀÇ Å¬·¡½ºÀÇ »ý¼ºÀÚ¸Þ¼µå°¡ È£Ãâ µÈ ÈÄ¿¡ ¾ÆµéÀÇ »ý¼ºÀÚ¸Þ¼µå°¡ È£ÃâµÇ´Â °ÍÀº ´ç¿¬ÇÑ ÀÏÀÔ´Ï´Ù. ±×·¸´Ù¸é ¾ÆµéÀÌ »ó¼ÓÀ» ¹Þ¾ÒÀ» °æ¿ì ¾Æ¹öÁöÀÇ »ý¼ºÀÚÀÇ ¸Å°³º¯¼ö´Â ´©°¡ ³Ö¾î ÁÙ ¼ö ÀÖÀ»±î¿ä? ¾Æ¹öÁöÀÇ »ý¼ºÀÚÀÇ ¸Å°³º¯¼ö¸¦ ³Ö¾îÁÖÁö ¾Ê¾Æµµ ¾Æ¹öÁöÀÇ »ý¼ºÀÚ°¡ È£Ãâ °¡´ÉÇÒ±î¿ä?
¾Æ¹öÁöŬ·¡½ºÀÇ »ý¼ºÀÚ¸Þ¼µå°¡ ¸Å°³º¯¼ö¸¦ °¡Áö°í ÀÖ´Ù¸é ¾Æµé ÀÔÀå¿¡¼´Â ¾Æ¹öÁöÀÇ »ý¼ºÀÚ¸Þ¼µåÀÇ ¸Å°³º¯¼ö¸¦ ³Ö¾îÁÖ¾î¾ß ÇÒ Àǹ«°¡ ÀÖ´Ù. À̰ÍÀº ¾ÆµéÀÌ ¾Æ¹öÁö¸¦ »ó¼Ó ¹Þ¾Ò±â ¶§¹®À̸ç ÀÚµ¿À¸·Î ¾ÆµéÀÌ »ý¼ºµÇ¾îÁú ¶§ ¾Æ¹öÁöÀÇ »ý¼ºÀÚ¸Þ¼µå¸¦ È£ÃâÇϱ⠶§¹®ÀÌ´Ù. |
À̰ÍÀº ºÒ°¡´ÉÇÕ´Ï´Ù. ¹«Á¶°ÇÀûÀ¸·Î, Àý´ëÀûÀ¸·Î, »ý¼ºÀÚ¿¡ ¸Å°³º¯¼ö°¡ Á¸ÀçÇÑ´Ù¸é »ý¼ºÀÚÀÇ ¸Å°³º¯¼öÀÇ Çü°ú °³¼ö¸¦ ¸ÂÃß¾î ÁÖ¾î¾ß¸¸ È£Ãâ °¡´ÉÇÕ´Ï´Ù. »ó¼ÓÀ» ¾Æµé Ŭ·¡½º°¡ ¹Þ¾Æ ¹ö¸° »óÅÂÀÌ°í ±×¸®°í ¾ÆµéÀº ¾Æ¹öÁöÀÇ »ý¼ºÀÚ¿¡°Ô ¸Å°³º¯¼ö¸¦ ³Ö¾îÁÙ Àǹ«°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù. À̰ÍÀ» ¹«½ÃÇÑ´Ù¸é ¾ÆµéÀº ¸¸µé¾îÁú ¼ö ¾ø½À´Ï´Ù.
SuperSon.java(this Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦) |
class SuperFather{ private String name; public SuperFather(String name){ this.name = name; System.out.println("name:" + name); } } public class SuperSon extends SuperFather{ public SuperSon(String str){ super(str); } public static void main(String[] args){ SuperSon s = new SuperSon("»ó¼ÓÀÇ super Test"); } } |
C:\examples\4. Class for Basic Java>javac SuperSon.java C:\examples\4. Class for Basic Java>java SuperSon |
4.7.4 °á·Ð
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù1ºÎ ÀúÀÚ:ÃÖ¿µ°ü |