Javaã«ãŠã„ã¦ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズム(Polymorphism)ã¯ã€ã‚ªãƒ–ジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ï¼ˆOOP)ã®åŸºæœ¬çš„ãªæ¦‚念ã®ä¸€ã¤ã§ã‚りã€åŠ¹æžœçš„ã§æŸ”軟ãªã‚³ãƒ¼ãƒ‰ã®ä½œæˆã«é‡è¦ã§ã™ã€‚以下ã«ã€ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムãŒãªãœé‡è¦ã§ã‚ã‚‹ã‹ã‚’説明ã—ã¾ã™ã€‚
- æŸ”è»Ÿæ€§ã¨æ‹¡å¼µæ€§ï¼š ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを使用ã™ã‚‹ã¨ã€åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ã‚„インタフェースを使用ã—ã¦ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトã«å¯¾å‡¦ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®æŸ”è»Ÿæ€§ã¨æ‹¡å¼µæ€§ãŒå‘上ã—ã€æ–°ã—ã„ã‚¯ãƒ©ã‚¹ã‚’è¿½åŠ ã—ã¦ã‚‚æ—¢å˜ã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹å¿…è¦ãŒå°‘ãªããªã‚Šã¾ã™ã€‚
- コードã®ç°¡æ½”性: ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを使用ã™ã‚‹ã¨ã€åŒã˜ã‚¤ãƒ³ã‚¿ãƒ•ェースや基底クラスを共有ã™ã‚‹ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ä¸€è²«ã—ãŸæ–¹æ³•ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ãŒç°¡æ½”ã§ã‚ã‹ã‚Šã‚„ã™ããªã‚Šã¾ã™ã€‚
- メンテナンス性ã®å‘上: åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ã‚„インタフェースを使用ã—ã¦ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã‚’処ç†ã™ã‚‹ã“ã¨ã§ã€ã‚³ãƒ¼ãƒ‰ã®ä¿å®ˆãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚æ–°ã—ã„ã‚¯ãƒ©ã‚¹ã‚’è¿½åŠ ã™ã‚‹å ´åˆã‚‚ã€æ—¢å˜ã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã›ãšã«æ–°ã—ã„æ©Ÿèƒ½ã‚’組ã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚
- 抽象化ã®ä¿ƒé€²ï¼š ãƒãƒªãƒ¢ãƒ¼ãƒ•ã‚£ã‚ºãƒ ã¯æŠ½è±¡åŒ–ã‚’ã‚µãƒãƒ¼ãƒˆã—ã¾ã™ã€‚抽象クラスやインタフェースを使用ã™ã‚‹ã“ã¨ã§ã€å…±é€šã®æŒ¯ã‚‹èˆžã„を定義ã—ã€ãれを具象クラスã§å…·ä½“çš„ãªå®Ÿè£…ã«æ‹¡å¼µã§ãã¾ã™ã€‚
- コードã®å†åˆ©ç”¨ï¼š ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを活用ã™ã‚‹ã¨ã€å…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ•ェースや基底クラスを使用ã—ã¦è¤‡æ•°ã®ã‚¯ãƒ©ã‚¹ã‚’扱ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚³ãƒ¼ãƒ‰ã®å†åˆ©ç”¨ãŒä¿ƒé€²ã•れã¾ã™ã€‚
例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ãªãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã®ç°¡å˜ãªä¾‹ã‚’考ãˆã¦ã¿ã¾ã—ょã†ï¼š
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a Circle");
}
}
class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing a Square");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape square = new Square();
drawShape(circle);
drawShape(square);
}
public static void drawShape(Shape shape) {
shape.draw();
}
}ã“ã®ä¾‹ã§ã¯ã€Shape インタフェースを共有ã—ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ï¼ˆCircle 㨠Square)ãŒãれを実装ã—ã¦ã„ã¾ã™ã€‚drawShape メソッドã§ã¯ã€ç•°ãªã‚‹å½¢çжã®ã‚ªãƒ–ジェクトをåŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ã§æç”»ã§ãã¾ã™ã€‚ã“れãŒãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã®ä¸€ä¾‹ã§ã‚ã‚Šã€æŸ”è»Ÿã§æ‹¡å¼µå¯èƒ½ãªã‚³ãƒ¼ãƒ‰ã‚’実ç¾ã—ã¦ã„ã¾ã™ã€‚
ç·´ç¿’å•題
オブジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã§ã¯ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ãŒå…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ•ェースや基底クラスを共有ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ã“ã®æ¦‚念を利用ã™ã‚‹ã¨ã€åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ã‚„インタフェースを使用ã—ã¦ã€ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ä¸€è²«ã—ãŸã‚¢ã‚¯ã‚»ã‚¹ã‚’æä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れを「ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムã€ã¨å‘¼ã³ã¾ã™ã€‚
ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムをç†è§£ã™ã‚‹ã“ã¨ã§ã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®æŸ”軟性ãŒå‘上ã—ã€æ–°ã—ã„ã‚¯ãƒ©ã‚¹ã‚’è¿½åŠ ã—ã¦ã‚‚æ—¢å˜ã®ã‚³ãƒ¼ãƒ‰ã‚’変更ã™ã‚‹å¿…è¦ãŒå°‘ãªããªã‚Šã¾ã™ã€‚ã“ã®ç·´ç¿’å•題ã§ã¯ã€ç•°ãªã‚‹å½¢çжã®å›³å½¢ã‚’扱ã†ã‚·ãƒ³ãƒ—ルãªãƒ—ãƒã‚°ãƒ©ãƒ を作æˆã—ã€ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムを活用ã—ã¦å…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ•ェースを使用ã™ã‚‹æ–¹æ³•を探求ã—ã¾ã™ã€‚
基本的ãªãƒãƒªãƒ¢ãƒ¼ãƒ•ィズãƒ
015-001 å•題 解ç”例
015-002 å•題 解ç”例
015-003 å•題 解ç”例
015-004 å•題 解ç”例
アップã‚ャスト
015-005 å•題 解ç”例
015-006 å•題 解ç”例
015-007 å•題 解ç”例
ダウンã‚ャスト
015-008 å•題 解ç”例
015-009 å•題 解ç”例
015-010 å•題 解ç”例
015-011 å•題 解ç”例
å‹•çš„ãªé…列
015-012 å•題 解ç”例
015-013 å•題 解ç”例
015-014 å•題 解ç”例
015-015 å•題 解ç”例
インスタンス型ã®ç¢ºèª
015-016 å•題 解ç”例
015-017 å•題 解ç”例
015-018 å•題 解ç”例