// Vehicle クラスã®å®šç¾©
class Vehicle {
// start メソッド
public void start() {
System.out.println("Vehicle is starting");
}
}
// Car クラスã®å®šç¾©ï¼ˆVehicle クラスを拡張)
class Car extends Vehicle {
// start メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰
@Override
public void start() {
System.out.println("Car is starting");
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Vehicle クラスã®ã‚ªãƒ–ジェクトを作æˆ
Vehicle vehicle = new Vehicle();
// Vehicle クラス㮠start メソッドを呼ã³å‡ºã™
vehicle.start();
// Car クラスã®ã‚ªãƒ–ジェクトを作æˆ
Car car = new Car();
// Car クラス㮠start メソッドを呼ã³å‡ºã™ï¼ˆã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå‘¼ã°ã‚Œã‚‹ï¼‰
car.start();
}
}
ã“ã®ä¾‹ã§ã¯ã€Vehicle クラスãŒåŸºæœ¬çš„㪠start メソッドをæä¾›ã—ã€Car クラスãŒã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ç‹¬è‡ªã®æŒ™å‹•ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™ã€‚メインクラスã§ã¯ã€Vehicle クラス㨠Car クラスã®ãれãžã‚Œã®ã‚ªãƒ–ジェクトを作æˆã—ã€start メソッドを呼ã³å‡ºã—ã¦ã„ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒãƒªãƒ¢ãƒ¼ãƒ•ã‚£ã‚ºãƒ ã®æ¦‚念ãŒç¢ºèªã§ãã¾ã™ã€‚
å®Ÿè¡Œçµæžœ
Vehicle is starting
Car is starting
Vehicleクラスã®ã‚ªãƒ–ジェクトvehicleを作æˆã—ã€ãã®startメソッドを呼ã³å‡ºã™ã¨ã€”Vehicle is starting” ã¨è¡¨ç¤ºã•れã¾ã™ã€‚Carクラスã®ã‚ªãƒ–ジェクトcarを作æˆã—ã€ãã®startメソッドを呼ã³å‡ºã™ã¨ã€”Car is starting” ã¨è¡¨ç¤ºã•れã¾ã™ã€‚Carクラスã§startメソッドãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れã¦ã„ã‚‹ãŸã‚ã€Vehicleクラスã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ãªãã€Carクラスã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå‘¼ã°ã‚Œã¾ã™ã€‚
ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズãƒ
「ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã€ã¯ã€ã‚ªãƒ–ジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã«ãŠã„ã¦é‡è¦ãªæ¦‚念ã§ã‚りã€åŒã˜åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚„æ“作を異ãªã‚‹ã‚¯ãƒ©ã‚¹ã§å…±æœ‰ã™ã‚‹ã“ã¨ãŒã§ãる性質を指ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトをåŒä¸€ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを介ã—ã¦æ‰±ã†ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚以下ã«ã€Œãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã€ã«ã¤ã„ã¦ã®ä¸»ãªãƒã‚¤ãƒ³ãƒˆã‚’解説ã—ã¾ã™ã€‚
- å¤šæ…‹æ€§ã®æ¦‚念:
- ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã¯ã€ã€Œå¤šæ…‹æ€§ã€ã¨ã‚‚呼ã°ã‚Œã¾ã™ã€‚ã“れã¯ã€åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ã‚„æ“作ãŒç•°ãªã‚‹ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ç•°ãªã‚‹å‹•作をã™ã‚‹èƒ½åŠ›ã‚’æŒ‡ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€åŒã˜åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã¤ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトをåŒã˜ã‚ˆã†ã«æ‰±ãˆã‚‹ã¨ã„ã†æŸ”軟性をæä¾›ã—ã¾ã™ã€‚
- オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã¨å‹•的メソッドディスパッãƒ:
- ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã¯ä¸»ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ï¼ˆoverride)ã¨å‹•的メソッドディスパッãƒï¼ˆdynamic method dispatch)ã«åŸºã¥ã„ã¦ã„ã¾ã™ã€‚サブクラスãŒè¦ªã‚¯ãƒ©ã‚¹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å†å®šç¾©ã™ã‚‹ã“ã¨ã§ã€å®Ÿè¡Œæ™‚ã«æ£ã—ã„メソッドãŒå‘¼ã³å‡ºã•れるよã†ã«ãªã‚Šã¾ã™ã€‚
- 共通ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース:
- ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを実ç¾ã™ã‚‹ãŸã‚ã«ã¯ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ãŒå…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース(ã¾ãŸã¯æŠ½è±¡ã‚¯ãƒ©ã‚¹ï¼‰ã‚’共有ã™ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¹ã¯åŒã˜åå‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã¡ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトをåŒã˜ã‚ˆã†ã«æ‰±ãˆã¾ã™ã€‚
- クラスã®éšŽå±¤æ§‹é€ :
- ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã¯é€šå¸¸ã€ã‚¯ãƒ©ã‚¹ã®éšŽå±¤æ§‹é€ (継承関係)を利用ã—ã¦ã„ã¾ã™ã€‚サブクラスãŒè¦ªã‚¯ãƒ©ã‚¹ã‚’æ‹¡å¼µã—ã€è¦ªã‚¯ãƒ©ã‚¹ã§å®šç¾©ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ã§ã€ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを実ç¾ã—ã¾ã™ã€‚
- アップã‚ャストã¨ãƒ€ã‚¦ãƒ³ã‚ャスト:
- アップã‚ャスト(upcasting)ã¯ã€ã‚µãƒ–クラスã®ã‚ªãƒ–ジェクトを親クラスã®åž‹ã«å¤‰æ›ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚ダウンã‚ャスト(downcasting)ã¯ãã®é€†ã§ã€è¦ªã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトをサブクラスã®åž‹ã«å¤‰æ›ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã«ãŠã„ã¦ã¯ã€ã‚¢ãƒƒãƒ—ã‚ャストãŒä¸€èˆ¬çš„ã«ä½¿ç”¨ã•れã¾ã™ã€‚
- 実行時ã®åž‹ã¨ã‚³ãƒ³ãƒ‘イル時ã®åž‹:
- ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã§ã¯ã€ã‚ªãƒ–ジェクトã®å®Ÿéš›ã®åž‹ï¼ˆå®Ÿè¡Œæ™‚ã®åž‹ï¼‰ã¨å¤‰æ•°ã®åž‹ï¼ˆã‚³ãƒ³ãƒ‘イル時ã®åž‹ï¼‰ã¨ã„ã†2ã¤ã®åž‹ãŒã‚りã¾ã™ã€‚実行時ã«ã¯å®Ÿéš›ã®åž‹ã«åŸºã¥ã„ã¦é©åˆ‡ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れã¾ã™ã€‚
ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã¯ã€æŸ”è»Ÿã§æ‹¡å¼µå¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã‚’構築ã™ã‚‹ä¸Šã§éžå¸¸ã«æœ‰ç”¨ã§ã™ã€‚ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトを共通ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを通ã˜ã¦æ“作ã™ã‚‹ã“ã¨ã§ã€ã‚³ãƒ¼ãƒ‰ã®å†åˆ©ç”¨æ€§ãŒå‘上ã—ã€ä¿å®ˆæ€§ãŒå‘上ã—ã¾ã™ã€‚
「015 ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント