
3åéããã°ã©ãã³ã°è¬åº§ 第9å: èšèšã®çŽæäºïœã€ã³ã¿ãŒãã§ãŒã¹ãšæœè±¡ã¯ã©ã¹ïœ
ç»å Žäººç©ïŒ
ãã£ããå çïŒéç§°:å çïŒïŒ ãªããžã§ã¯ãæåãã¹ã¿ãŒãæ®æ®µã¯åªãããããŸã«ãŠãŒã¢ã¢ã亀ããªãã解説ã
ããã婿ïŒéç§°:ãããåïŒïŒ ããã°ã©ãã³ã°ãå§ããã°ããã®è¥æãçŽ æŽãªçåãæããããã®ãåŸæã
ãããåïŒ å çïŒååã¯ãªããžã§ã¯ãå士ã®é£æºã«ã€ããŠåŠã³ãŸããïŒã¯ã©ã¹ãããŒã ã§åãã£ãŠããªãã ãã·ã¹ãã ãçãç©ã¿ããã§é¢çœãã§ãïŒ
å çïŒ ãããããããåïŒãã®æèŠããšãŠã倧åã ãããªããžã§ã¯ãæåã§ã¯ãã¯ã©ã¹ããªããžã§ã¯ãããããã圹å²ãæã¡ã飿ºãåãããšã§ãè€éãªæ©èœãæè»ã«å®çŸãããã ã仿¥ã¯ããã®ã飿ºããããã«åŒ·åã«ããããã®ãèšèšã®çŽæäºãã«ã€ããŠåŠãã§ããããããããã€ã³ã¿ãŒãã§ãŒã¹ããšãæœè±¡ã¯ã©ã¹ãã ã
ãããåïŒ çŽæäºã§ããïŒãªãã ãé£ãããã§ãâŠïŒ
å çïŒ å€§äžå€«ãå¿é ãããªããããããã¯ãããã°ã©ã ã®ãèšèšå³ããããæç¢ºã«ããå°æ¥ã®å€æŽã«åŒ·ãããããã®ããšãŠã䟿å©ãªããŒã«ãªãã ãç¹ã«ãè€æ°ã®ã¯ã©ã¹ã«å ±éã®æ¯ãèãã匷å¶ããããå ±éã®åºç€ãæäŸãããããã®ã«åœ¹ç«ã€ãã ã
ã€ã³ã¿ãŒãã§ãŒã¹ãšã¯ïŒïœãå¥çŽããå®çŸ©ããïœ
å çïŒ ãŸãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ïŒInterfaceïŒããã説æããããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãç°¡åã«èšããšãã¯ã©ã¹ãæããªããã°ãªããªãæ©èœã®ãªã¹ããããã¯ã©ã¹ãå®ãã¹ãå¥çŽãã®ãããªãã®ã ã
ãããåïŒ å¥çŽâŠïŒ
å çïŒ ãããäŸãã°ãå®¶é»è£œåãèããŠã¿ãŠããããã黿ºãå ¥ãããã黿ºãåãããšããæ©èœã¯ããã¬ãã«ããå·èµåº«ã«ããæŽæ¿¯æ©ã«ãå ±éããŠããããïŒ
ãããåïŒ ã¯ãããããŸãïŒ
å çïŒ ãããã®å®¶é»è£œåã¯ãããããéãçš®é¡ã®æ©æ¢°ã ãã©ãã黿ºã®ãªã³ãªãããšããå ±éã®ãæäœæ¹æ³ããæã£ãŠããããã®ãæäœæ¹æ³ãã ããå®ãããã®ãã€ã³ã¿ãŒãã§ãŒã¹ã®ã€ã¡ãŒãžã«è¿ããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãäœããã¹ãããã ããå®çŸ©ãããã©ã®ããã«ãã¹ãããã¯å®çŸ©ããªããã ã
ãããåïŒ ãäœããã¹ãããã ãâŠïŒå ·äœçã«ã¯ã©ãããããšã§ããïŒ
å çïŒ ã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ãã¡ãœããã®ã宣èšãã ããæžãããŠãããã€ãŸããã¡ãœããã®ååãåŒæ°ãæ»ãå€ã®åã ããå®çŸ©ãããŠããŠãå ·äœçãªåŠçå 容ïŒå®è£ ïŒã¯æžãããŠããªããã ããã®ã€ã³ã¿ãŒãã§ãŒã¹ããå®è£ ïŒimplementïŒãããã¯ã©ã¹ããå ·äœçãªåŠçå 容ãèšè¿°ãã矩åãè² ãã
å çïŒ ãªããJava 8以éã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã«ã**ããã©ã«ãã¡ãœããïŒdefaultããŒã¯ãŒãïŒãã¹ã¿ãã£ãã¯ã¡ãœããïŒstaticããŒã¯ãŒãïŒ**ãšãã£ããå ·äœçãªå®è£ ãæã€ã¡ãœãããèšè¿°ã§ããããã«ãªã£ããã ãããã«ãããæ¢åã®ã€ã³ã¿ãŒãã§ãŒã¹ã«æ°ããæ©èœã远å ããéã®åŸæ¹äºææ§ã®åé¡ã解決ã§ããããã«ãªã£ããã ã
Java
// ã€ã³ã¿ãŒãã§ãŒã¹ã®äŸ: 黿ºæäœ
interface PowerControl {
// æœè±¡ã¡ãœããïŒå®è£
ã¯ããªãïŒ
void turnOn();
void turnOff();
// Java 8以éïŒããã©ã«ãã¡ãœããïŒå®è£
ãæã€ããšãã§ããïŒ
// æ¢åã®å®è£
ã¯ã©ã¹ã«åœ±é¿ãäžããã«ãæ°ããæ©èœã远å ã§ãã
default void reset() {
turnOff();
turnOn();
System.out.println("ïŒå
±éåŠçïŒãªã»ããããŸããã");
}
// Java 8以éïŒã¹ã¿ãã£ãã¯ã¡ãœãã
// ã€ã³ã¿ãŒãã§ãŒã¹èªäœã«é¢é£ãããŠãŒãã£ãªãã£æ©èœãªã©
static void showManual() {
System.out.println("黿ºæäœããã¥ã¢ã«ã衚瀺");
}
}
// ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããã¯ã©ã¹: ãã¬ã
class Television implements PowerControl {
@Override
public void turnOn() {
System.out.println("ãã¬ãã®é»æºãå
¥ããŸããã");
}
@Override
public void turnOff() {
System.out.println("ãã¬ãã®é»æºãåããŸããã");
}
// reset()ã¡ãœããã¯å®è£
ããªããŠãããã©ã«ãå®è£
ã䜿ããã
}
// ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããã¯ã©ã¹: å·èµåº«
class Refrigerator implements PowerControl {
@Override
public void turnOn() {
System.out.println("å·èµåº«ã®é»æºãå
¥ããå·åŽãéå§ããŸããã");
}
@Override
public void turnOff() {
System.out.println("å·èµåº«ã®é»æºãåããŸããã");
}
// reset()ã¡ãœããã¯å®è£
ããªããŠãããã©ã«ãå®è£
ã䜿ããã
}
public class InterfaceExample {
public static void main(String[] args) {
PowerControl tv = new Television();
PowerControl fridge = new Refrigerator();
System.out.println("å®¶é»ã®é»æºãå
¥ããŸãã");
tv.turnOn();
fridge.turnOn();
System.out.println("\nå®¶é»ã®é»æºããªã»ããããŸãã");
tv.reset(); // ããã©ã«ãã¡ãœããã®åŒã³åºã
fridge.reset();
System.out.println("\nããã¥ã¢ã«ã衚瀺ããŸãã");
PowerControl.showManual(); // ã¹ã¿ãã£ãã¯ã¡ãœããã®åŒã³åºãïŒã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªãã€ã³ã¿ãŒãã§ãŒã¹åããåŒã¶ïŒ
System.out.println("\nå®¶é»ã®é»æºãåããŸãã");
tv.turnOff();
fridge.turnOff();
}
}
å çïŒ ãã®äŸã§ã¯ãTelevisionãRefrigeratorãPowerControlã€ã³ã¿ãŒãã§ãŒã¹ãimplementsïŒå®è£ ïŒããŠãããããã«ãããã©ã¡ãã®ã¯ã©ã¹ãturnOn()ãšturnOff()ã¡ãœãããæã€ããšãä¿èšŒããããã ããããŠãPowerControlåã®å€æ°ã§ãç°ãªãçš®é¡ã®å®¶é»ãåãããã«æäœã§ãããããã¯ããªã¢ãŒãã£ãºã ã®åŒ·åãªå¿çšäŸã§ãããããããã«ãããã©ã«ãã¡ãœããã§å ±éåŠçãæäŸãã€ã€ãå¿ èŠã«å¿ããŠåã¯ã©ã¹ã§ãªãŒããŒã©ã€ããã§ãããã ã
ãããåïŒ ãªãã»ã©ïŒããã®æ©èœã¯å¿ ãæã£ãŠãã ããããã£ãŠããçŽæäºãªãã§ããïŒã ããããã¬ãã§ãå·èµåº«ã§ãåãããã«turnOn()ã£ãŠåŒã¹ããã ïŒããã©ã«ãã¡ãœãããã¹ã¿ãã£ãã¯ã¡ãœããããããªããŠãã€ã³ã¿ãŒãã§ãŒã¹ã£ãŠé²åããŠããã§ããïŒ
æœè±¡ã¯ã©ã¹ãšã¯ïŒïœãå ±éã®åºç€ããæäŸããïœ
å çïŒ æ¬¡ã«ãæœè±¡ã¯ã©ã¹ïŒAbstract ClassïŒãã ãæœè±¡ã¯ã©ã¹ã¯ãç°¡åã«èšããšãäžå®å šãªã¯ã©ã¹ããŸãã¯ãå ±éã®åºç€ãæäŸããã¯ã©ã¹ãã®ãããªãã®ã ã
ãããåïŒ äžå®å šâŠïŒã©ãããããšã§ããïŒ
å çïŒ æœè±¡ã¯ã©ã¹ã¯ãéåžžã®ã¯ã©ã¹ãšåãããã«å±æ§ãå®å šã«å®è£ ãããã¡ãœãããæã€ããšãã§ãããããããäžã€ä»¥äžã®ãæœè±¡ã¡ãœããïŒAbstract MethodïŒããæã€ããšãã§ãããã ãæœè±¡ã¡ãœããã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®ã¡ãœãããšåãããå ·äœçãªåŠçå 容ãæããªãã¡ãœããã®ããšã ãã
å çïŒ æœè±¡ã¯ã©ã¹ã¯ãããèªäœãçŽæ¥ãªããžã§ã¯ããšããŠçæããããšã¯ã§ããªããå¿ ãããã®æœè±¡ã¯ã©ã¹ããç¶æ¿ïŒextendsïŒãããåã¯ã©ã¹ããæœè±¡ã¡ãœããããã¹ãŠå®è£ ããå¿ èŠããããã ã
ãããåïŒ ç¶æ¿ãããã§ããïŒã€ã³ã¿ãŒãã§ãŒã¹ã¯implementsã§ãæœè±¡ã¯ã©ã¹ã¯extendsâŠïŒ
å çïŒ ãã®éãïŒããã倧ããªéãã®äžã€ã ããäŸãã°ããä¹ãç©ããèããŠã¿ããã
å šãŠã®ä¹ãç©ã«ã¯ãç§»åããããšããå ±éã®æ©èœãããã
ãããããç§»åãããæ¹æ³ã¯ãè»ãšèªè»¢è»ã§ã¯å šãéãã
ãè»ããšããä¹ãç©ã«ã¯ããšã³ãžã³ããããããšãã£ãå ±éã®å±æ§ãããã
å çïŒ ãã®å Žåããä¹ãç©ããæœè±¡ã¯ã©ã¹ãšããŠå®çŸ©ãããç§»åãããã¡ãœãããæœè±¡ã¡ãœããã«ããããããŠãè»ãèªè»¢è»ãšãã£ãå ·äœçãªä¹ãç©ã®ã¯ã©ã¹ãããã®æœè±¡ã¯ã©ã¹ãç¶æ¿ããŠãããããã®ç§»åæ¹æ³ãå®è£ ãããã ã
Java
// æœè±¡ã¯ã©ã¹ã®äŸ: ä¹ãç©
abstract class Vehicle {
protected String name; // å
±éã®å±æ§ïŒãã£ãŒã«ãïŒ
public Vehicle(String name) { // ã³ã³ã¹ãã©ã¯ã¿ãæãŠã
this.name = name;
}
// æœè±¡ã¡ãœãã: åä¹ãç©ã§å
·äœçãªç§»åæ¹æ³ãå®è£
ããã
public abstract void move();
// å®å
šã«å®è£
ãããã¡ãœãã: å
šãŠã®ä¹ãç©ã«å
±éã®åäœ
public void displayInfo() {
System.out.println("ä¹ãç©: " + name);
}
}
// æœè±¡ã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹: è»
class Car extends Vehicle {
public Car(String name) {
super(name);
}
@Override
public void move() {
System.out.println(name + "ããšã³ãžã³ãå¹ãããŠç§»åããŸããããŒã³ïŒ");
}
}
// æœè±¡ã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹: èªè»¢è»
class Bicycle extends Vehicle {
public Bicycle(String name) {
super(name);
}
@Override
public void move() {
System.out.println(name + "ãããã«ãæŒãã§ç§»åããŸããã·ã£ã«ã·ã£ã«ïŒ");
}
}
public class AbstractClassExample {
public static void main(String[] args) {
// Vehicle vehicle = new Vehicle("äžè¬çãªä¹ãç©"); // ãšã©ãŒïŒæœè±¡ã¯ã©ã¹ã¯çŽæ¥ã€ã³ã¹ã¿ã³ã¹åã§ããªã
Vehicle myCar = new Car("ãã€ã«ãŒ");
Vehicle myBicycle = new Bicycle("æçšèªè»¢è»");
myCar.displayInfo();
myCar.move();
myBicycle.displayInfo();
myBicycle.move();
}
}
å çïŒ Vehicleã¯ã©ã¹ã¯move()ãšããæœè±¡ã¡ãœãããæã€ãããããèªäœã¯äžå®å šã§ãçŽæ¥ãªããžã§ã¯ããäœãããšãã§ããªããããããCarãBicycleãVehicleãç¶æ¿ããããšã§ãmove()ã¡ãœããã®å®è£ ã匷å¶ãããname屿§ãdisplayInfo()ã¡ãœãããšãã£ãå ±éã®æ©èœãåå©çšã§ãããã ã
ã€ã³ã¿ãŒãã§ãŒã¹ãšæœè±¡ã¯ã©ã¹ã®äœ¿ãåã
å çïŒ ããŠãã€ã³ã¿ãŒãã§ãŒã¹ãæœè±¡ã¯ã©ã¹ããã©ã¡ãããæªå®è£ ã®ã¡ãœããããæã€ããšãã§ããããå ±éã®æ¯ãèãã匷å¶ããã®ã«åœ¹ç«ã€ãããããã©ã䜿ãåããã°ãããšæãïŒ
ãããåïŒ ããŒããã©ã¡ãã䌌ãŠãããããè¿·ã£ã¡ãããŸããâŠã
å çïŒ è¯ã質åã ïŒäœ¿ãåãã®ãã€ã³ãã¯ããã€ããããã

å çïŒ ãŸãšãããšã
ã€ã³ã¿ãŒãã§ãŒã¹:
ãïœãšããŠã®æ¯ãèããã§ããããšããå¥çŽãå®çŸ©ãããå Žåã«äœ¿ãã
è€æ°ã®ã¯ã©ã¹ã«å ±éã®æ©èœãæãããããããããã®ã¯ã©ã¹éã«ãis-aãé¢ä¿ïŒç¶æ¿é¢ä¿ïŒããªãå Žåããè€æ°ã®å ±éæ©èœãã¯ã©ã¹ã«æããããå ŽåïŒå€éç¶æ¿ã®ä»£æ¿ïŒã«ç¹ã«æå¹ã
äŸïŒãé£ã¶ããšãã§ããïŒFlyableïŒããæ³³ãããšãã§ããïŒSwimmableïŒãã
æœè±¡ã¯ã©ã¹:
ãå ±éã®åºç€ããæäŸãããã€äžéšã®å ±éå®è£ ãæããããå Žåã«äœ¿ãã
è€æ°ã®ã¯ã©ã¹ããïœã®äžçš®ã§ããããšãã匷ããis-aãé¢ä¿ãæã¡ãå ±éã®å±æ§ãåŠçããžãã¯ãæã£ãŠããå Žåã«æå¹ã
äŸïŒãåç©ïŒAnimalïŒããå³åœ¢ïŒShapeïŒãã
ãããåïŒ ãªãã»ã©ïŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ãèœåããã圹å²ããå®çŸ©ããæãã§ãæœè±¡ã¯ã©ã¹ã¯ãå ±éã®èŠªãã«ãªãæããªãã§ããïŒå€éç¶æ¿ã®æç¡ã倧ããªéãã ïŒ
å çïŒ ãã®éãïŒããããé©åã«äœ¿ãåããããšã§ãããæè»ã§ãæ¡åŒµããããããããŠå€æŽã«åŒ·ãããã°ã©ã ãèšèšã§ããããã«ãªããã ã
仿¥ã®ãŸãšãïŒ
ã€ã³ã¿ãŒãã§ãŒã¹ïŒInterfaceïŒ:
ã¯ã©ã¹ãå®ãã¹ããå¥çŽããå®çŸ©ããã
æœè±¡ã¡ãœããã®ä»ãããã©ã«ãã¡ãœãããã¹ã¿ãã£ãã¯ã¡ãœããïŒJava 8以éïŒãæãŠãã
implementsããŒã¯ãŒãã§ã¯ã©ã¹ã«å®è£ ãããã
è€æ°ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ã§ããïŒå€éç¶æ¿ã®ä»£æ¿ïŒã
ãäœããã¹ãããã匷å¶ããã
æœè±¡ã¯ã©ã¹ïŒAbstract ClassïŒ:
ãäžå®å šãªã¯ã©ã¹ããŸãã¯ãå ±éã®åºç€ããæäŸããã
æœè±¡ã¡ãœãããšå®å šã«å®è£ ãããã¡ãœããã®äž¡æ¹ãæãŠãã
extendsããŒã¯ãŒãã§ã¯ã©ã¹ã«ç¶æ¿ãããã
çŽæ¥ãªããžã§ã¯ããçæã§ããªãã
ãå ±ééšåããæäŸãã€ã€ããäžéšã®å®è£ ããåã¯ã©ã¹ã«ä»»ããã
䜿ãåãã®ãã€ã³ã:
ã€ã³ã¿ãŒãã§ãŒã¹: ãïœãšããŠã®æ¯ãèããã§ããããšããå¥çŽå®çŸ©ãå€éç¶æ¿ã®ä»£æ¿ã
æœè±¡ã¯ã©ã¹: ãïœã®äžçš®ã§ããããšããå ±éåºç€ãå ±éã®å±æ§ãäžéšã®å®è£ ãæããããå Žåã
ãããåïŒ å çã仿¥ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãšæœè±¡ã¯ã©ã¹ã«ã€ããŠããããããåãããŸããïŒèšèšã®çŽæäºã£ãŠãããã°ã©ã ããããã«ä¿ã€ããã«ããã倧åãªãã§ããïŒ
å çïŒ ãã®èª¿åã ããããåïŒãããã䜿ãããªãããšã§ãåã®ããã°ã©ã ã¯ããã«æŽç·Žããããã®ã«ãªãã¯ãã ãæ¬¡åã¯ããªããžã§ã¯ãæåã®èšèšãããã«å¹ççã«è¡ãããã®ããã¶ã€ã³ãã¿ãŒã³ããšããèãæ¹ãç¹ã«ããªããžã§ã¯ãäœãã®ãå·¥å ŽãããšãåŒã°ãããã¿ãŒã³ã«ã€ããŠåŠãã§ãããïŒ
ãããåïŒ ãªããžã§ã¯ãäœãã®å·¥å ŽïŒãªãã ãã¯ã¯ã¯ã¯ããŸãïŒæ¥œãã¿ã§ãïŒããããšãããããŸããïŒ
次åïŒç¬¬10å: ãªããžã§ã¯ãäœãã®ãå·¥å ŽãïŒïœãã¶ã€ã³ãã¿ãŒã³ãšãã¡ã¯ããªãŒã¡ãœãããã¿ãŒã³ïœ
#ãªããžã§ã¯ãæå #ããã°ã©ãã³ã°åå¿è #Java #ã¯ã©ã¹ãšã¡ãœãã #ããã°ã©ãã³ã°åŠç¿ #å ¥é