
3åéããã°ã©ãã³ã°è¬åº§ 第6å:ã倿§ãªåœ¢ãããåãããã«æ±ããïœããªã¢ãŒãã£ãºã ã®æ žå¿ïœ
ç»å Žäººç©ïŒ
ãã£ããå çïŒéç§°:å çïŒïŒ ãªããžã§ã¯ãæåãã¹ã¿ãŒãæ®æ®µã¯åªãããããŸã«ãŠãŒã¢ã¢ã亀ããªãã解説ã
ããã婿ïŒéç§°:ãããåïŒïŒ ããã°ã©ãã³ã°ãå§ããã°ããã®è¥æãçŽ æŽãªçåãæããããã®ãåŸæã
ãããåïŒ å çïŒä»æ¥ã¯ãªããžã§ã¯ãæåã®äžå€§èŠçŽ ãæåŸã®ãããªã¢ãŒãã£ãºã ãã«ã€ããŠæããŠããããã§ãããïŒãå€èº«ããããã®ããã«ãç¶æ³ã«å¿ããŠæ§ã ãªå§¿ãèŠãããã£ãŠèããŠããããæ¥œãã¿ã«ããŠãŸããïŒ
å çïŒ ãããããããåïŒãŸãã«ãã®ãæ§ã ãªå§¿ããšãåãããã«æ±ãããšããèãæ¹ãã仿¥ã®ããŒããããªã¢ãŒãã£ãºïŒPolymorphismïŒãã®æ žå¿ã ãããªããžã§ã¯ãæåã®äžå€§èŠçŽ ïŒã«ãã»ã«åãç¶æ¿ãããªã¢ãŒãã£ãºã ïŒã®ç· ããããã«ãµããããã匷åãªæŠå¿µãªãã ã
ãããåïŒ äžå€§èŠçŽ ãã€ãã«ã³ã³ããªãŒãã§ããïŒ
å çïŒ ããã ãããããŸã§ãã¯ã©ã¹ã¯èšèšå³ããªããžã§ã¯ãã¯å®äœããšåŠãã§ããããããŠãåäžè²¬ä»»ã®ååãã§åœ¹å²ãåãããã«ãã»ã«åãã§å®å šã«ä¿ã¡ããç¶æ¿ãã§å ±ééšåãåå©çšããŠããããããªã¢ãŒãã£ãºã ã¯ããããã®æŠå¿µãçµã¿åãããããšã§ãããæè»ã§ãæ¡åŒµããããããã°ã©ã ãäœãããã®ä»çµã¿ãªãã ã
ããªã¢ãŒãã£ãºã ãšã¯ïŒïœã倿§ãªåœ¢ãããåãããã«æ±ããïœ
å çïŒ ãŸãã¯ã身è¿ãªäŸã§èããŠã¿ããããããåãåã¯è²ã ãªåç©ãšåºäŒãããšãããããïŒäŸãã°ããç¬ãããç«ãããé³¥ããšãã
ãããåïŒ ã¯ãïŒå ¬åãšãã§ããèŠãããŸãïŒ
å çïŒ ãããããããã®åç©ãã¡ã«å ±éããŠã§ããè¡åã¯äœããªïŒ
ãããåïŒ ããŒãšãã鳎ãããšããé£ã¹ãããšããã§ããïŒ
å çïŒ ãã®éãïŒã鳎ãããšããè¡åãèããŠã¿ãŠã»ããã
ç¬ã¯ãã¯ã³ïŒããšé³Žãã
ç«ã¯ããã£ãŒïŒããšé³Žãã
é³¥ã¯ãããŒïŒããšé³Žãã
ã¿ããªã鳎ãããšããåãè¡åããããã©ããã®å ·äœçãªãé³Žãæ¹ãã¯ããããéãããïŒ
ãããåïŒ ã¯ãïŒå šç¶éããŸããïŒ
å çïŒ ã§ããåãã鳎ãïŒããšæç€ºãããšãããã¡ãã¡ãç¬ã ã£ããã¯ã³ãšèšãããç«ã ã£ãããã£ãŒãšèšãããšçްããæç€ºã䜿ãåããŠãããããããªãããïŒãåç©ãã«å¯ŸããŠã鳎ãïŒããšããåãæç€ºãåºãã°ãããããã®åç©ãèªåãããé³Žãæ¹ã§åå¿ããŠãããã
ãããåïŒ ããïŒããã§ããïŒã鳎ããã£ãŠèšãã°ããã®åç©ãã¡ãããšé³ŽããŠãããŸãïŒ
å çïŒ ãŸãã«ãã®ã倿§ãªåœ¢ïŒç°ãªãçš®é¡ã®ãªããžã§ã¯ãïŒãæã€ãã®ããåãã€ã³ã¿ãŒãã§ãŒã¹ïŒã¡ãœããåŒã³åºãïŒã«å¯ŸããŠãããããç°ãªãæ¯ãèããããããšããæ§è³ªããããªã¢ãŒãã£ãºã ããªãã ãã®ãªã·ã£èªã§ãPolyïŒå€ãã®ïŒ+ morphïŒåœ¢ïŒããšããæå³ã ãã
ããªã¢ãŒãã£ãºã ã®å®çŸæ¹æ³ïœç¶æ¿ãšãªãŒããŒã©ã€ãïœ
å çïŒ ããã°ã©ãã³ã°ã®äžçã§ããªã¢ãŒãã£ãºã ãå®çŸããã«ã¯ãåååŠãã ãç¶æ¿ããšããªãŒããŒã©ã€ãããéåžžã«éèŠã«ãªã£ãŠããã
å çïŒ åç©ã®äŸãã³ãŒãã§èŠãŠã¿ãããããŸããå ±éã®ãåç©ããšãã芪ã¯ã©ã¹ãäœãã
Java
// 芪ã¯ã©ã¹ïŒAnimal (åç©ã®å
±éã®èšèšå³)
public class Animal {
public void makeSound() {
System.out.println("äœããã®é³ããã"); // åºæ¬å®è£
}
}
å çïŒ ãã ããå®éã®ããã°ã©ã ã§ã¯ãAnimalã¯ã©ã¹ã®makeSound()ãçŽæ¥åŒã°ããããšã¯å°ãªããåã¯ã©ã¹ã§å¿ ãå®è£ ããããšã匷å¶ãããå Žåãªã©ã«ã¯ãabstractïŒæœè±¡ïŒã¡ãœãããšããŠå®çŸ©ããããšããããããã®å Žåã¯ãã¯ã©ã¹èªäœãabstractã«ãªãã
Java
// ããå³å¯ãªå®è£
ã®äŸ: æœè±¡ã¯ã©ã¹ãšããŠå®çŸ©
public abstract class Animal {
public abstract void makeSound(); // æœè±¡ã¡ãœãããšããŠå®çŸ©
}
å çïŒ ä»åã¯åããããããåªå ããŠãæåã®å®è£ ã§é²ããããæ¬¡ã«ãããããã®åç©ã®åã¯ã©ã¹ã§makeSound()ã¡ãœããããªãŒããŒã©ã€ãããã
Java
// åã¯ã©ã¹ïŒDog (ç¬ã®èšèšå³) - Animalãç¶æ¿
public class Dog extends Animal {
@Override // ãªãŒããŒã©ã€ãã§ããããšã瀺ãã¢ãããŒã·ã§ã³ïŒæ³šéïŒ
// ãã®ã¢ãããŒã·ã§ã³ã«ãããã³ã³ãã€ã«æã«ãªãŒããŒã©ã€ãã®æ£ç¢ºæ§ããã§ãã¯ããã
public void makeSound() {
System.out.println("ã¯ã³ïŒ"); // ç¬ç¬èªã®é³Žãæ¹
}
}
// åã¯ã©ã¹ïŒCat (ç«ã®èšèšå³) - Animalãç¶æ¿
public class Cat extends Animal {
@Override // ãªãŒããŒã©ã€ãã§ããããšã瀺ãã¢ãããŒã·ã§ã³ïŒæ³šéïŒ
// ãã®ã¢ãããŒã·ã§ã³ã«ãããã³ã³ãã€ã«æã«ãªãŒããŒã©ã€ãã®æ£ç¢ºæ§ããã§ãã¯ããã
public void makeSound() {
System.out.println("ãã£ãŒïŒ"); // ç«ç¬èªã®é³Žãæ¹
}
}
// åã¯ã©ã¹ïŒBird (é³¥ã®èšèšå³) - Animalãç¶æ¿
public class Bird extends Animal {
@Override // ãªãŒããŒã©ã€ãã§ããããšã瀺ãã¢ãããŒã·ã§ã³ïŒæ³šéïŒ
// ãã®ã¢ãããŒã·ã§ã³ã«ãããã³ã³ãã€ã«æã«ãªãŒããŒã©ã€ãã®æ£ç¢ºæ§ããã§ãã¯ããã
public void makeSound() {
System.out.println("ããŒïŒ"); // é³¥ç¬èªã®é³Žãæ¹
}
}
ãããåïŒ ãªãã»ã©ïŒAnimalã¯ã©ã¹ã«makeSound()ããã£ãŠãããããã®åç©ã¯ã©ã¹ã§ãã®äžèº«ããªãŒããŒã©ã€ãããŠããã§ããïŒ
å çïŒ ãã®éãïŒãããŠãããããããªã¢ãŒãã£ãºã ãšããŠæŽ»çšããå Žé¢ãéèŠã ã
Java
public class Zoo {
public static void main(String[] args) {
// Animalåã®å€æ°ã«ãç°ãªãçš®é¡ã®åã¯ã©ã¹ã®ãªããžã§ã¯ããæ ŒçŽããïŒããããã¢ãããã£ã¹ãããšåŒã¶ïŒ
Animal animal1 = new Dog(); // Dogã¯Animalã®äžçš®
Animal animal2 = new Cat(); // Catã¯Animalã®äžçš®
Animal animal3 = new Bird(); // Birdã¯Animalã®äžçš®
System.out.println("åç©ãã¡ã«é³ŽããŠããããïŒ");
animal1.makeSound(); // å®è¡çµæ: ã¯ã³ïŒ
animal2.makeSound(); // å®è¡çµæ: ãã£ãŒïŒ
animal3.makeSound(); // å®è¡çµæ: ããŒïŒ
System.out.println("\nå
šå¡ãããäžåºŠé³ŽããŠïŒ");
// Animalåã®é
åã«ãæ§ã
ãªåç©ãªããžã§ã¯ããå
¥ãã
Animal[] animals = new Animal[3];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Bird();
for (Animal animal : animals) {
animal.makeSound(); // åãmakeSound()ãåŒã¶ã®ã«ãããããã®åç©ã®é³Žã声ãåºã
}
}
}
ãããåïŒ ããŒïŒãããïŒAnimalåã®å€æ°ã«DogãCatãBirdãå ¥ãããããã§ããïŒãããŠãanimal.makeSound()ã£ãŠåãã³ãŒããªã®ã«ãããããã®åç©ãã¡ãããšèªåã®é³Žãæ¹ã§é³ŽããŠãïŒãŸãã§å€èº«ããããã¿ããã«ãå€èŠïŒå€æ°ã®åïŒã¯åãã§ãäžèº«ïŒå®éã®ãªããžã§ã¯ãïŒãéããšåããå€ãããã§ããïŒ
å çïŒ ãã®æèŠããŸãã«ããªã¢ãŒãã£ãºã ã®ééå³ã ãïŒã芪ã¯ã©ã¹ã®åãšããŠåã¯ã©ã¹ã®ãªããžã§ã¯ããæ±ããããšã§ãåãã¡ãœããåŒã³åºãã§ããå®è¡æã«ã¯ãã®ãªããžã§ã¯ããæ¬æ¥æã£ãŠããïŒãªãŒããŒã©ã€ããããïŒã¡ãœãããå®è¡ããããã ãããããåçãã€ã³ãã£ã³ã°ãããåŸæãã€ã³ãã£ã³ã°ããšåŒã¶ããšããããã
å çïŒ ããã§éèŠãªã®ã¯ãanimal1ãªã©ã®å€æ°ã®åã¯AnimalïŒã³ã³ãã€ã«æåïŒã ãã©ãå®éã«æ ŒçŽãããŠãããªããžã§ã¯ãã¯DogãCatïŒå®è¡æåïŒã ãšããããšãJavaã¯å®è¡æã«ããã®ãªããžã§ã¯ãã®å®éã®åãèŠãŠé©åãªmakeSound()ã¡ãœãããåŒã³åºããŠããããã ã
ããªã¢ãŒãã£ãºã ã®ã¡ãªãã
å çïŒ ãã®ããªã¢ãŒãã£ãºã ãšããä»çµã¿ã¯ãã©ããªã¡ãªããããããããšæãïŒ
ãããåïŒ ãã£ããªãã ãã³ãŒãããããã·ã³ãã«ã«ãªããããªæ°ãããŸãïŒ
å çïŒ çŽ æŽãããïŒãŸãã«ãã®éãã ããäž»ãªã¡ãªããã¯ä»¥äžã®éãã ã
ã³ãŒãã®ã·ã³ãã«åãšæè»æ§:
ç°ãªãçš®é¡ã®ãªããžã§ã¯ãã«å¯ŸããŠãåãã³ãŒãã§åãæäœãã§ããããã«ãªãã
äŸãã°ãåç©åã®å šãŠã®åç©ã«ã鳎ãããšæç€ºããã«ãŒãããAnimalåãšããŠãŸãšããŠæžããã
æ¡åŒµæ§ã®åäž:
ããæ°ããåç©ïŒäŸãã°Lionã¯ã©ã¹ïŒã远å ããŠããæ¢åã®ã³ãŒãïŒäŸïŒAnimalã®é åãã«ãŒãããéšåïŒã倿Žããå¿ èŠããªããæ°ããåç©ã远å ãããã³ã«if-elseæã远å ããå¿ èŠããªããªããã ã
ä¿å®æ§ã®åäž:
å ±éã®åŠçã¯èŠªã¯ã©ã¹ã§ç®¡çããç¹æã®åŠçã¯åã¯ã©ã¹ã§ãªãŒããŒã©ã€ãããã®ã§ã倿Žãä¿®æ£ã圱é¿ããç¯å²ãéå®ã§ããã
ã³ãŒãã®å¯èªæ§:
ããã°ã©ã ãç¹å®ã®ãªããžã§ã¯ãåã«äŸåããããæœè±¡çãªåïŒèŠªã¯ã©ã¹ïŒããšããŠæ±ããããã«ãªããããããæ±çšçã§çè§£ããããã³ãŒãã«ãªãã
åå®å šæ§ã®åäž:
ã³ã³ãã€ã«æã«åãã§ãã¯ãè¡ããããããå®è¡æãšã©ãŒãæžãããã
ãããåïŒ ãªãã»ã©ïŒããããã®çš®é¡ã®åç©ãçžæã«ããæã«ãå šéšãåå¥ã«æ±ãããããªããŠããåç©ããšããŠäžæ¬ã§æ±ããããããããå¹ççã«ãªããã§ããïŒå°æ¥ãæ°ããåç©ãå¢ããŠãå®å¿ã ïŒ
å çïŒ ãã®éãïŒããªã¢ãŒãã£ãºã ã¯ãå€§èŠæš¡ãªã·ã¹ãã ãéçºããéã«ãéåžžã«åŒ·åãªæŠåšãšãªããã ãæªæ¥ã®å€åã«åŒ·ããæè»ãªããã°ã©ã ãäœãããã«æ¬ ãããªãèãæ¹ã ãã
仿¥ã®ãŸãšãïŒ
ããªã¢ãŒãã£ãºã ïŒPolymorphismïŒïŒ
ã倿§ãªåœ¢ïŒç°ãªãçš®é¡ã®ãªããžã§ã¯ãïŒãæã€ãã®ããåãã€ã³ã¿ãŒãã§ãŒã¹ïŒã¡ãœããåŒã³åºãïŒã«å¯ŸããŠãããããç°ãªãæ¯ãèããããããšãããªããžã§ã¯ãæåã®æ§è³ªã
ã®ãªã·ã£èªã§ãå€ãã®åœ¢ããšããæå³ã
å®çŸæ¹æ³ïŒäž»ã«ç¶æ¿ïŒis-aé¢ä¿ïŒãšãã¡ãœããã®ãªãŒããŒã©ã€ãã«ãã£ãŠå®çŸãããã
ã芪ã¯ã©ã¹ã®åãã§ãåã¯ã©ã¹ã®ãªããžã§ã¯ãããæ±ãããšïŒã¢ãããã£ã¹ãïŒããã€ã³ãã
å®è¡æã«é©åãªã¡ãœãããåŒã³åºããããåçãã€ã³ãã£ã³ã°ãã
倿°ã®åïŒã³ã³ãã€ã«æåïŒãšå®éã®ãªããžã§ã¯ãã®åïŒå®è¡æåïŒã®éããçè§£ããããšãéèŠã
ã¡ãªããïŒ
ã³ãŒãã®ã·ã³ãã«åãšæè»æ§ïŒç°ãªããªããžã§ã¯ããåãã³ãŒãã§æ±ããã
æ¡åŒµæ§ã®åäžïŒæ°ããåã¯ã©ã¹ã远å ããŠãæ¢åã³ãŒãã®å€æŽãäžèŠã
ä¿å®æ§ã®åäžïŒå€æŽã®åœ±é¿ç¯å²ãéå®ã§ããã
å¯èªæ§ã®åäžïŒããæ±çšçã§åãããããã³ãŒãã«ãªãã
åå®å šæ§ã®åäžïŒã³ã³ãã€ã«æãšã©ãŒã®æžå°ã
ãããåïŒ å çã仿¥ã¯ãããªã¢ãŒãã£ãºã ãã«ã€ããŠããããããåãããŸããïŒäžã€ã®æç€ºã§ãè²ã ãªãªããžã§ã¯ããèªåãããåããªããŠãæ¬åœã«å€èº«ããããã¿ããã§ãïŒããã§ãªããžã§ã¯ãæåã®äžå€§èŠçŽ ãå šéšçè§£ã§ããŸããïŒ
å çïŒ ãã®èª¿åã ããããåïŒããã§ãšãïŒããã§åã¯ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®åºç€ã®åºç€ãæãéèŠãªæ±ãšãªãæŠå¿µãå šãŠåŠãã ããšã«ãªããã«ãã»ã«åãç¶æ¿ããããŠããªã¢ãŒãã£ãºã ãããããçè§£ãã䜿ãããªãããšããè¯ãããã°ã©ã ãæžãããã®ç¬¬äžæ©ã ãæ¬¡åã¯ãä»ååŠãã äžå€§èŠçŽ ãç·åŸ©ç¿ããŠãå šäœã®ç¹ããã確èªããŠãããã
ãããåïŒ ç·åŸ©ç¿ïŒãã£ãã身ã«ã€ãããã«é 匵ããŸãïŒããããšãããããŸããïŒ
次åïŒç¬¬7åãªããžã§ã¯ãæåã®äžå€§èŠçŽ ç·åŸ©ç¿ïŒïœå
šäœåãšç¹ãããçè§£ãããïœ
#ãªããžã§ã¯ãæå #ããã°ã©ãã³ã°åå¿è #Java #ã¯ã©ã¹ãšã¡ãœãã #ããã°ã©ãã³ã°åŠç¿ #å ¥é