// 抽象クラス Vehicle ã®å®šç¾©
abstract class Vehicle {
// 抽象メソッド startEngine() ã®å®£è¨€
public abstract void startEngine();
}
// 具象クラス Car ã®å®šç¾©
class Car extends Vehicle {
// startEngine() メソッドã®å®Ÿè£…
@Override
public void startEngine() {
System.out.println("Car engine started.");
}
}
// 具象クラス Motorcycle ã®å®šç¾©
class Motorcycle extends Vehicle {
// startEngine() メソッドã®å®Ÿè£…
@Override
public void startEngine() {
System.out.println("Motorcycle engine started.");
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Vehicle クラスをインスタンス化ã—よã†ã¨ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹
// Vehicle myVehicle = new Vehicle(); // ã“れã¯ã‚¨ãƒ©ãƒ¼
// 代ã‚りã«å…·è±¡ã‚¯ãƒ©ã‚¹ã‚’使用ã™ã‚‹
Vehicle myCar = new Car();
Vehicle myMotorcycle = new Motorcycle();
// 具象クラス㮠startEngine() メソッドを呼ã³å‡ºã™
myCar.startEngine();
myMotorcycle.startEngine();
}
}
エラーã®è€ƒå¯Ÿ:
Vehicleã‚¯ãƒ©ã‚¹ã¯æŠ½è±¡ã‚¯ãƒ©ã‚¹ã§ã‚りã€ãã®ãŸã‚直接インスタンス化ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã“ã®ãŸã‚ã€Vehicle myVehicle = new Vehicle();ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ãŒã‚¨ãƒ©ãƒ¼ã¨ãªã‚Šã¾ã™ã€‚- 抽象クラスã¯ã€ãã®å…·è±¡ã‚¯ãƒ©ã‚¹ã‚’通ã˜ã¦åˆ©ç”¨ã•れるã“ã¨ãŒæ„図ã•れã¦ã„ã¾ã™ã€‚ãã®ãŸã‚ã€
Vehicleクラスをインスタンス化ã™ã‚‹éš›ã«ã¯ã€å…·è±¡ã‚¯ãƒ©ã‚¹ï¼ˆCarã¾ãŸã¯Motorcycle)を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ã“ã®ä¾‹ã§ã¯ã€Vehicle クラスを直接インスタンス化ã™ã‚‹ã“ã¨ãŒã§ããªã„ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。
抽象クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã®åˆ¶ç´„
抽象クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã«ã¯ã„ãã¤ã‹ã®åˆ¶ç´„ãŒã‚りã¾ã™ã€‚以下ã«ã€ãれらã®åˆ¶ç´„ã«ã¤ã„ã¦è§£èª¬ã—ã¾ã™ã€‚
抽象クラスã¯ç›´æŽ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã§ããªã„:
抽象クラスã¯å…·ä½“çš„ãªå®Ÿè£…ã‚’æŒãŸãªã„抽象メソッドをå«ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ãã®ãŸã‚ã€æŠ½è±¡ã‚¯ãƒ©ã‚¹è‡ªä½“ã«ã¯ç›´æŽ¥ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
例: Animal myAnimal = new Animal();(Animal ãŒæŠ½è±¡ã‚¯ãƒ©ã‚¹ã§ã‚ã‚‹å ´åˆï¼‰ã¯ã‚¨ãƒ©ãƒ¼ã¨ãªã‚Šã¾ã™ã€‚
具象クラスを介ã—ãŸåˆ©ç”¨ãŒå¿…è¦:
抽象クラスã®åˆ©ç”¨ã¯ã€å…·è±¡ã‚¯ãƒ©ã‚¹ã‚’介ã—ã¦è¡Œã‚れる必è¦ãŒã‚りã¾ã™ã€‚å…·è±¡ã‚¯ãƒ©ã‚¹ã¯æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚’ç¶™æ‰¿ã—ã€æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã‚’ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦å…·ä½“çš„ãªå®Ÿè£…ã‚’æä¾›ã—ã¾ã™ã€‚
例:
Animal myAnimal = new Dog(); // ã“ã‚Œã¯æœ‰åй
Animal invalidAnimal = new Animal(); // ã“れã¯ã‚¨ãƒ©ãƒ¼
ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを利用:
抽象クラスを利用ã™ã‚‹ä¸»ãªç›®çš„ã¯ã€ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを実ç¾ã™ã‚‹ã“ã¨ã§ã™ã€‚抽象クラス型ã®å¤‰æ•°ã«å…·è±¡ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’代入ã™ã‚‹ã“ã¨ã§ã€å…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã—ã€ç•°ãªã‚‹å…·è±¡ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’çµ±ä¸€çš„ã«æ‰±ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
Animal myAnimal = new Dog(); // 具象クラスを介ã—ã¦æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚’åˆ©ç”¨
抽象クラスã®ç›®çš„:
抽象クラスã¯ã€å…±é€šã®æ©Ÿèƒ½ã‚„インターフェースをæä¾›ã—ã€ãã®å…·è±¡ã‚µãƒ–クラスã«å…±é€šã®åŸºç›¤ã‚’æä¾›ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚直接インスタンス化ã§ããªã„制約ã¯ã€æŠ½è±¡ã‚¯ãƒ©ã‚¹ãŒå…·è±¡çš„ãªã‚ªãƒ–ジェクトを生æˆã™ã‚‹ã®ã§ã¯ãªãã€ãã®æ©Ÿèƒ½ã‚’継承ã™ã‚‹ã‚µãƒ–クラスを通ã˜ã¦åˆ©ç”¨ã•れるã¹ãã§ã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚
ã“れらã®åˆ¶ç´„ã«ã‚ˆã‚Šã€æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚’é©åˆ‡ã«åˆ©ç”¨ã—ã€ã‚ªãƒ–ジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®åŸºæœ¬åŽŸå‰‡ã§ã‚る継承やãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを実ç¾ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚
「016 抽象クラスã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント