
3åéããã°ã©ãã³ã°è¬åº§ 第5å: ãå ±éã®èšèšå³ããããæ°ããèšèšå³ããäœãïœç¶æ¿ïœ
ç»å Žäººç©ïŒ
ãã£ããå çïŒéç§°:å çïŒïŒ ãªããžã§ã¯ãæåãã¹ã¿ãŒãæ®æ®µã¯åªãããããŸã«ãŠãŒã¢ã¢ã亀ããªãã解説ã
ããã婿ïŒéç§°:ãããåïŒïŒ ããã°ã©ãã³ã°ãå§ããã°ããã®è¥æãçŽ æŽãªçåãæããããã®ãåŸæã
ãããåïŒ å çïŒä»æ¥ã¯ãç¶æ¿ãã«ã€ããŠæããŠããããã§ãããïŒãå ±éã®èšèšå³ããæ°ããèšèšå³ãäœããã£ãŠããªãã ãç§å¯åºå°ããã¯ãŒã¢ãããããã¿ããã§ã¯ã¯ã¯ã¯ããŸãïŒ
å çïŒ ãããããŸããããåããã衚çŸã ãïŒãŸãã«ãã®ããã¯ãŒã¢ãããããå ±ééšåã®æŽ»çšããã仿¥ã®ããŒããç¶æ¿ïŒInheritanceïŒãã®æ žå¿ã ãããªããžã§ã¯ãæåã®äžå€§èŠçŽ ïŒã«ãã»ã«åãç¶æ¿ãããªã¢ãŒãã£ãºã ïŒã®äžã€ã§ãããããšãŠã倧åãªæŠå¿µãªãã ã
ãããåïŒ äžå€§èŠçŽ ãæ®ãã®äžã€ã§ããïŒããããããŸãïŒ
å çïŒ ããã ãããããŸã§ãã¯ã©ã¹ã¯èšèšå³ããªããžã§ã¯ãã¯å®äœããšåŠãã§ãããããããŠãåäžè²¬ä»»ã®ååãã§ã¯ã©ã¹ã®åœ¹å²ãæç¢ºã«åãããã«ãã»ã«åãã§ã¯ã©ã¹ã®å éšãå®å šã«ä¿ã€æ¹æ³ãåŠãã ãç¶æ¿ã¯ããããã®ç¥èãããã«å¹ççã«æŽ»çšããããã®ä»çµã¿ãªãã ã
ç¶æ¿ãšã¯ïŒïœã芪ããããåããžåãç¶ããããã®ïœ
å çïŒ ãŸãã¯ã身è¿ãªäŸã§èããŠã¿ããããããåãåã¯ã人éãã ãã
ãããåïŒ ã¯ããããã§ãïŒ
å çïŒ ãããã人éã«ã¯ã©ããªå ±éã®ç¹åŸŽãããïŒ
ãããåïŒ ããŒãšãäºæ¬è¶³ã§æ©ããèšèã話ããã飯ãé£ã¹ããã¿ãããªããšã§ããïŒ
å çïŒ ãã®éãïŒã§ã¯ã人éã®äžã«ããåŠçããã瀟äŒäººãããå çããšãã£ãããããããªãçš®é¡ãããããã
ãããåïŒ ã¯ããåãä»ã¯ãåŠçããããåã§ãïŒ
å çïŒ çŽ æŽãããïŒããã§èããŠã»ããã®ã¯ããåŠçããšããçš®é¡ã¯ãã人éããšãã倧ããªæ çµã¿ãæã£ãŠããç¹åŸŽããã»ãšãã©ãã®ãŸãŸæã£ãŠããããšããããšã ãäºæ¬è¶³ã§æ©ãããèšèã話ãããã飯ãé£ã¹ããããã«å ããŠããåŠæ ¡ã«éãããå匷ããããšãã£ããåŠçããªãã§ã¯ã®ç¹åŸŽãããã
ãããåïŒ ãªãã»ã©ïŒã人éããæã£ãŠããããšãããã®ãŸãŸåãç¶ãã§ãããã«äœã远å ãããã¿ãããªæãã§ããïŒ
å çïŒ ãŸãã«ãã®æèŠã ïŒããã°ã©ãã³ã°ã®äžçã§ãããã®ãåãç¶ãããšããä»çµã¿ããç¶æ¿ïŒInheritanceïŒããšåŒã¶ãã ã
å ±éããç¹åŸŽãæã€å ã®ã¯ã©ã¹ãã芪ã¯ã©ã¹ïŒã¹ãŒããŒã¯ã©ã¹ãåºåºã¯ã©ã¹ïŒããšåŒã¶ã
芪ã¯ã©ã¹ã®ç¹åŸŽãåãç¶ããããã«ç¬èªã®æ©èœã远å ã»å€æŽããæ°ããã¯ã©ã¹ããåã¯ã©ã¹ïŒãµãã¯ã©ã¹ã掟çã¯ã©ã¹ïŒããšåŒã¶ã
å çïŒÂ 以éãåãããããã®ããã芪ã¯ã©ã¹ããåã¯ã©ã¹ããšåŒã¶ããšã«ãããã ããããããšã§ã芪ã¯ã©ã¹ã«æžãããå ±éã®ããŒã¿ãã¡ãœããããåã¯ã©ã¹ã§ç¹°ãè¿ãæžããã«æžããã ã
ç¶æ¿ã®æžãæ¹ãšäŸ
å çïŒ Javaã§ã¯ãextendsãšããããŒã¯ãŒãã䜿ã£ãŠç¶æ¿ã衚ããã
Java
// 芪ã¯ã©ã¹ïŒCar (è»ã®å
±éã®èšèšå³)
public class Car {
private String color;
private String maker;
private int speed;
public Car(String color, String maker) {
this.color = color;
this.maker = maker;
this.speed = 0;
System.out.println(this.maker + "補ã®" + this.color + "ã®è»ãäœãããŸããïŒ");
}
// getterã¡ãœããïŒçç¥ïŒ
public String getColor() { return this.color; }
public String getMaker() { return this.maker; }
public int getSpeed() { return this.speed; }
// setterã¡ãœããïŒäžéšçç¥ïŒ
public void setSpeed(int speed) {
if (speed < 0) {
System.out.println("é床ã¯è² ã®å€ã«ã§ããŸããã");
// å®éã®éçºã§ã¯ãäžæ£ãªå€ã«å¯ŸããŠã¯äŸå€ãæããããšãå€ããïŒäŸïŒthrow new IllegalArgumentException("é床ã¯è² ã®å€ã«ã§ããŸããã");ïŒã
return;
}
if (speed > 300) {
System.out.println("é床äžéãè¶
ããŠããŸãã300km/hã«èšå®ããŸãã");
this.speed = 300;
return;
}
this.speed = speed;
System.out.println("é床ã" + speed + "km/hã«èšå®ããŸããã");
}
public void accelerate(int accelerationSpeed) {
setSpeed(this.speed + accelerationSpeed);
}
public void brake() {
setSpeed(0);
System.out.println(this.maker + "ã®è»ã忢ããŸããã");
}
}
// åã¯ã©ã¹ïŒElectricCar (黿°èªåè»ã®èšèšå³)
// Carã¯ã©ã¹ã®ç¹åŸŽãå
šãŠç¶æ¿ãã
public class ElectricCar extends Car {
private int batteryLevel; // 黿°èªåè»ç¬èªã®å±æ§
// ã³ã³ã¹ãã©ã¯ã¿
public ElectricCar(String color, String maker, int batteryLevel) {
// 芪ã¯ã©ã¹(Car)ã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºã
super(color, maker);
this.batteryLevel = batteryLevel;
System.out.println("ããã¯é»æ°èªåè»ã§ããããããªãŒæ®éïŒ" + this.batteryLevel + "%");
}
// 黿°èªåè»ç¬èªã®ã¡ãœãã
public void charge() {
this.batteryLevel = 100;
System.out.println("ããããªãŒãå
é»ããŸãããæ®éïŒ" + this.batteryLevel + "%");
}
// batteryLevelã®getter
public int getBatteryLevel() {
return this.batteryLevel;
}
}
ãããåïŒ ããïŒextends Carã£ãŠæžãã ãã§ãCarã¯ã©ã¹ã®è²ãšãé床ãšããå éã»åæ¢ã®ã¡ãœãããŸã§äœ¿ããããã«ãªããã§ããïŒïŒãããïŒããããªãŒã®æ©èœã¯ElectricCarç¬èªã®ãã®ãªãã§ããïŒ
å çïŒ ãã®éãïŒElectricCarã¯ã©ã¹ã¯ãCarã¯ã©ã¹ãæã£ãŠããpublicãprotectedããããŠpackage-privateïŒããã©ã«ãïŒãªå±æ§ãã¡ãœãããåãç¶ããã ããã ããprivateãªã¡ã³ããŒã¯ç¶æ¿ãããªããã
å çïŒ super(color, maker);ãšããéšåãéèŠã ããããã¯ãåã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ããã芪ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãããã®ãã®ãªãã ã芪ãæã€å ±éã®åæèšå®ããåãå©çšããããšã§ãã³ãŒãã®éè€ãé²ãããšãã§ããã
å çïŒ å®éã«äœ¿ã£ãŠã¿ããšããããªæãã ãã
Java
public class Main {
public static void main(String[] args) {
// 䜿çšäŸ
ElectricCar tesla = new ElectricCar("çœ", "Tesla", 80);
// 芪ã¯ã©ã¹ããç¶æ¿ããã¡ãœããã䜿çš
tesla.accelerate(50);
System.out.println("çŸåšã®é床: " + tesla.getSpeed() + "km/h");
// åã¯ã©ã¹ç¬èªã®ã¡ãœããã䜿çš
tesla.charge();
tesla.brake();
}
}
ç¶æ¿ã®ã¡ãªãã
å çïŒ ãã®ç¶æ¿ãšããä»çµã¿ã¯ãã©ããªã¡ãªããããããããšæãïŒ
ãããåïŒ ããŒãšãå ±éã®ã³ãŒããäœåãæžããªããŠæžããããæ¥œïŒã§ããïŒ
å çïŒ ãã®éãïŒãããäžçªå€§ããªã¡ãªããã®äžã€ã ãã
ã³ãŒãã®åå©çšæ§: 芪ã¯ã©ã¹ã«å ±éã®æ©èœãéçŽããããšã§ãåã¯ã©ã¹ã§åãã³ãŒããäœåºŠãæžãå¿ èŠããªããªãã
ä¿å®æ§ã»ç®¡çæ§ã®åäž: å ±éã®æ©èœã«ãã°ãèŠã€ãã£ãå Žåã芪ã¯ã©ã¹ã ããä¿®æ£ããã°ããããç¶æ¿ããŠããå šãŠã®åã¯ã©ã¹ã«ä¿®æ£ãåæ ãããã
æ¡åŒµæ§: æ¢åã®èŠªã¯ã©ã¹ãå£ãããšãªããæ°ããåã¯ã©ã¹ã远å ããŠæ©èœãæ¡åŒµã§ããã
æ§é å: ã¯ã©ã¹éã®é¢ä¿ïŒãAã¯Bã®äžçš®ã§ããããšããé¢ä¿ãããããis-aãé¢ä¿ãšåŒã¶ãïŒãæç¢ºã«è¡šçŸã§ããããã°ã©ã å šäœã®æ§é ãåããããããªãã
ãããåïŒ ãªãã»ã©ïŒCarã¯ã©ã¹ãä¿®æ£ããã°ãElectricCarãGasolineCarããå šéšèªåã§ä¿®æ£ãããã£ãŠããšã§ããïŒããã¯äŸ¿å©ã ïŒ
å çïŒ ãã®éãïŒããã¯ãŸãã«ãå ±éã®èšèšå³ããå ã«ãå°éåãããæ°ããèšèšå³ããäœãããšããã€ã¡ãŒãžã ãã
ç¶æ¿äœ¿çšæã®æ³šæç¹
å çïŒ ãšãŠã䟿å©ãªç¶æ¿ã ãã©ãããã€ã泚æç¹ããããã
Javaã§ã¯åäžç¶æ¿ã®ã¿ãµããŒã: äžã€ã®ã¯ã©ã¹ã¯ãçŽæ¥çã«äžã€ã®èŠªã¯ã©ã¹ããããç¶æ¿ã§ããªããã ã
privateãªã¡ã³ããŒã¯ç¶æ¿ãããªã: 芪ã¯ã©ã¹ã®privateãªå±æ§ãã¡ãœããã¯ãåã¯ã©ã¹ããã¯çŽæ¥ã¢ã¯ã»ã¹ã§ããªãã
ç¶æ¿é¢ä¿ã¯ãis-aãé¢ä¿ãæãç«ã€å Žåã«äœ¿çšãã:
ç¶æ¿ã¯ããAã¯Bã®äžçš®ã§ããããšããé¢ä¿ïŒis-aé¢ä¿ïŒãæãç«ã€ãšãã«äœ¿ãã®ãé©åã ãã
äŸãã°ããç¬ã¯åç©ã®äžçš®ã§ããïŒDog is an AnimalïŒãã¯æ£ããé¢ä¿ã ãã
ããããè»ã¯ãšã³ãžã³ã®äžçš®ã§ãããã®ãããªé¢ä¿ã§ç¶æ¿ã䜿ãããšãããšãèšèšããããããªã£ãŠããŸããã ãè»ã¯ãšã³ãžã³ããæã£ãŠãããããã©ãããšã³ãžã³ã®äžçš®ãã§ã¯ãªããããã
ã¡ãœããã®ãªãŒããŒã©ã€ãïœã芪ãã®è¡åããåããã¢ã¬ã³ãžïœ
å çïŒ ç¶æ¿ã«ã¯ããäžã€ããšãŠã匷åãªæ©èœããããã ãäŸãã°ãæ®éã®è»ãšé»æ°èªåè»ã§ãå éã®ä»æ¹ãå°ãéãããªããŠããšããããããããªããã
ãããåïŒ ããããšã³ãžã³é³ãããªããŠã¢ãŒã¿ãŒã®é³ããããšãïŒ
å çïŒ ããã ãããããªæã«ãåã¯ã©ã¹ã芪ã¯ã©ã¹ããåãç¶ãã ã¡ãœããã®äžèº«ã ãããåã¯ã©ã¹ç¬èªã®å 容ã«ãäžæžãïŒã¢ã¬ã³ãžïŒãããããšãã§ãããã ããããããªãŒããŒã©ã€ãïŒOverrideïŒããšåŒã¶ãã
Java
// ElectricCarã¯ã©ã¹ã«è¿œèš
public class ElectricCar extends Car {
// ... (æ¢åã®ã³ãŒã) ...
@Override // ãªãŒããŒã©ã€ãã§ããããšã瀺ãã¢ãããŒã·ã§ã³ïŒæ³šéïŒ
// ãã®ã¢ãããŒã·ã§ã³ã«ãããã³ã³ãã€ã«æã«ãªãŒããŒã©ã€ãã®æ£ç¢ºæ§ããã§ãã¯ããã
public void accelerate(int accelerationSpeed) {
// 芪ã¯ã©ã¹ã®accelerate()ãšã¯éãã黿°èªåè»ç¬èªã®å éåŠç
if (getBatteryLevel() > 10) { // ããããªãŒãããã確èª
setSpeed(getSpeed() + accelerationSpeed);
// ããããªãŒæ®éã®å€æŽã¯ã衚瀺ãšåé¢ããŠè¡ããã
this.batteryLevel -= 5;
System.out.println("éãã«å éããŸãïŒçŸåšããããªãŒæ®éïŒ" + this.batteryLevel + "%");
} else {
System.out.println("ããããªãŒãå°ãªãããå éã§ããŸããïŒ");
}
}
}
ãããåïŒ ããŒïŒ@Overrideã£ãŠæžããšãåãååã®accelerateã¡ãœããã§ãã黿°èªåè»ãªãã§ã¯ã®åãã«ãªããã§ããïŒããããªãŒã®æ®éãæžããã ïŒ
å çïŒ ãã®éãïŒå ±éã®ãå éããããšããè¡åã¯æã£ãŠãããã©ããã®å ·äœçãªãå éã®ä»æ¹ãã¯é»æ°èªåè»ç¬èªã®ãã®ã«ã§ãããã ã
å çïŒ ãã ãããªãŒããŒã©ã€ãããéã¯ãã¡ãœããåãåŒæ°ã®åãšæ°ã¯èŠªã¯ã©ã¹ã®ã¡ãœãããšåãã§ãªããã°ãªããªããæ»ãå€ã®åã¯ã芪ã¯ã©ã¹ãšåããããã®ãµãã¿ã€ãïŒããå ·äœçãªåïŒã§ãªããã°ãªããªããšããã«ãŒã«ãããããæ³šæããŠããããããŸãããªããžã§ã¯ãæåã®æè»æ§ãé«ããéèŠãªæ©èœã ãã
仿¥ã®ãŸãšãïŒ
ç¶æ¿ïŒInheritanceïŒïŒ
æ¢åã®ã¯ã©ã¹ïŒèŠªã¯ã©ã¹ïŒã®ç¹åŸŽïŒããŒã¿ãã¡ãœããïŒãæ°ããã¯ã©ã¹ïŒåã¯ã©ã¹ïŒãåãç¶ããããã«ç¬èªã®æ©èœã远å ã»å€æŽããä»çµã¿ã
ããŒã¯ãŒãïŒextends ã䜿ã£ãŠç¶æ¿ãããåã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãã㯠super() ã§èŠªã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºãã
ã¡ãªããïŒ
ã³ãŒãã®åå©çšæ§ïŒå ±ééšåãäœåºŠãæžããã«æžãã
ä¿å®æ§ã»ç®¡çæ§ã®åäžïŒèŠªã¯ã©ã¹ã®ä¿®æ£ãåã¯ã©ã¹ã«åæ ãããã
æ¡åŒµæ§ïŒæ¢åã³ãŒããå£ããæ©èœã远å ã§ããã
æ§é åïŒã¯ã©ã¹éã®ãis-aïŒïœã®äžçš®ã§ããïŒãé¢ä¿ãæç¢ºã«ããã
泚æç¹: åäžç¶æ¿ãprivateã¡ã³ããŒã¯ç¶æ¿ãããªããis-aé¢ä¿ãéèŠã
ãªãŒããŒã©ã€ãïŒOverrideïŒïŒ
芪ã¯ã©ã¹ããåãç¶ãã ã¡ãœããã®å®è£ ïŒäžèº«ïŒããåã¯ã©ã¹ã§ç¬èªã«äžæžãããããšã
@Overrideã¢ãããŒã·ã§ã³ïŒæ³šéïŒãä»ããŠç€ºãããšãå€ããããã«ããã³ã³ãã€ã«æã«æ£ç¢ºæ§ããã§ãã¯ãããã
ã¡ãœããåãåŒæ°ã®åãšæ°ã¯èŠªã¯ã©ã¹ãšåäžã§ããå¿ èŠããããæ»ãå€ã®åã¯èŠªã¯ã©ã¹ãšåããããã®ãµãã¿ã€ãã§ãªããã°ãªããªãã
ãããåïŒ å çã仿¥ã¯ãç¶æ¿ãã«ã€ããŠããšãŠãããåãããŸããïŒå ±éã®èšèšå³ããæ°ããèšèšå³ãäœãããšã§ããããå¹ççã«ããã°ã©ã ãæžããããã«ãªããã§ããïŒãªãŒããŒã©ã€ãããããïŒ
å çïŒ ãã®èª¿åã ããããåïŒããã§ãªããžã§ã¯ãæåã®äžå€§èŠçŽ ã§ãããã«ãã»ã«åããç¶æ¿ããããªã¢ãŒãã£ãºã ãã®ãã¡ãäºã€ãŸã§çè§£ããããšã«ãªããæ¬¡åã¯ãæåŸã®ãããªã¢ãŒãã£ãºã ãã«ã€ããŠåŠãã§ããããç¶æ¿ããã¯ã©ã¹ãã¡ãããŸãã§å€èº«ããããã®ããã«ãç¶æ³ã«å¿ããŠæ§ã ãªå§¿ãèŠããããããªé¢çœã話ã ãã
ãããåïŒ å€èº«ããããïŒãŸããŸãé¢çœããã§ãïŒæ¥œãã¿ã§ãïŒããããšãããããŸããïŒ