// インターフェース A
interface A {
// Aã®ãƒ¡ã‚½ãƒƒãƒ‰
}
// インターフェース B
interface B {
// Bã®ãƒ¡ã‚½ãƒƒãƒ‰
}
// インターフェース C
interface C {
// Cã®ãƒ¡ã‚½ãƒƒãƒ‰
}
// Aã¨Bã‚’æ‹¡å¼µã—ãŸæ–°ã—ã„インターフェイス AB
interface AB extends A, B {
// ABã®ãƒ¡ã‚½ãƒƒãƒ‰
}
// ABã¨Cã‚’æ‹¡å¼µã—ãŸæ–°ã—ã„インターフェイス ABC
interface ABC extends AB, C {
// ABCã®ãƒ¡ã‚½ãƒƒãƒ‰
}
ã“ã®ä¾‹ã§ã¯ã€3ã¤ã®åŸºæœ¬çš„ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース A, B, C を作æˆã—ã€ãれãžã‚Œã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«ã¯ãƒ¡ã‚½ãƒƒãƒ‰ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’仮定ã—ã¦ã„ã¾ã™ã€‚次ã«ã€A 㨠B ã‚’æ‹¡å¼µã—ãŸæ–°ã—ã„インターフェイス AB を作æˆã—ã€AB 㨠C ã‚’æ‹¡å¼µã—ãŸæ–°ã—ã„インターフェイス ABC を作æˆã—ã¦ã„ã¾ã™ã€‚å„インターフェースã«ã¯å…·ä½“çš„ãªãƒ¡ã‚½ãƒƒãƒ‰ã®å®Ÿè£…ãŒãªã„ãŸã‚ã€å¿…è¦ã«å¿œã˜ã¦é©åˆ‡ãªãƒ¡ã‚½ãƒƒãƒ‰ã‚’è¿½åŠ ã—ã¦ãã ã•ã„。
多é‡ç¶™æ‰¿
多é‡ç¶™æ‰¿ï¼ˆMultiple Inheritance)ã€ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã«ãŠã„ã¦ã€1ã¤ã®ã‚¯ãƒ©ã‚¹ãŒè¤‡æ•°ã®ã‚¯ãƒ©ã‚¹ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ã“ã¨ã‚’指ã—ã¾ã™ã€‚Javaã¯ã‚¯ãƒ©ã‚¹ã«å¯¾ã—ã¦å˜ä¸€ç¶™æ‰¿ã‚’採用ã—ã¦ãŠã‚Šã€1ã¤ã®ã‚¯ãƒ©ã‚¹ã¯ä»–ã®ã‚¯ãƒ©ã‚¹ã‚’直接的ã«1ã¤ã ã‘継承ã§ãã¾ã™ã€‚ã“れã¯ã€ã‚¯ãƒ©ã‚¹é–“ã®çŸ›ç›¾ã‚„ç«¶åˆã‚’é¿ã‘ã€å˜ç´”ãªã‚¯ãƒ©ã‚¹ã®éšŽå±¤æ§‹é€ を確立ã™ã‚‹ãŸã‚ã®æ–¹é‡ã§ã™ã€‚
多é‡ç¶™æ‰¿ãŒè¨±å®¹ã•れるプãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžï¼ˆä¾‹: C++)ã§ã¯ã€ã‚¯ãƒ©ã‚¹ãŒè¤‡æ•°ã®ã‚¯ãƒ©ã‚¹ã‚’åŒæ™‚ã«ç¶™æ‰¿ã§ãã¾ã™ã€‚ã—ã‹ã—ã€å¤šé‡ç¶™æ‰¿ã¯ã„ãã¤ã‹ã®å•題を引ãèµ·ã“ã™å¯èƒ½æ€§ãŒã‚りã¾ã™ï¼š
ダイヤモンドå•題(Diamond Problem):
åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰ãŒè¤‡æ•°ã®ã‚¯ãƒ©ã‚¹ã‹ã‚‰ç¶™æ‰¿ã•ã‚Œã€æœ€çµ‚çš„ãªã‚µãƒ–クラスã§ã©ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使用ã™ã‚‹ã‹ãŒä¸æ˜Žçžã«ãªã‚‹å•題。
A
/ \
B C
\ /
D
ã“ã®éšŽå±¤æ§‹é€ ã«ãŠã„ã¦ã€B 㨠C ãŒå…±é€šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã£ã¦ãŠã‚Šã€D ㌠Aã€Bã€C ã‚’åŒæ™‚ã«ç¶™æ‰¿ã™ã‚‹ã¨ã€ã©ã¡ã‚‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒå‘¼ã³å‡ºã•れるã¹ãã‹ãŒæ›–昧ã«ãªã‚Šã¾ã™ã€‚
クラス間ã®çµã³ã¤ããŒå¼·ããªã‚‹:
多é‡ç¶™æ‰¿ã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¹é–“ã®çµã³ã¤ããŒå¼·ããªã‚Šã€ä¿å®ˆæ€§ã‚„拡張性ãŒä½Žä¸‹ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
Javaã§ã¯ã“れらã®å•題をé¿ã‘ã‚‹ãŸã‚ã€å˜ä¸€ç¶™æ‰¿ã¨ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®æ¦‚念を導入ã—ã¾ã—ãŸã€‚複数ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスを実装ã™ã‚‹ã“ã¨ã§ã€ã‚¯ãƒ©ã‚¹ãŒç•°ãªã‚‹æ©Ÿèƒ½ã‚’利用ã§ãã€åŒæ™‚ã«ã‚¯ãƒ©ã‚¹ã®éšŽå±¤æ§‹é€ をシンプルã«ä¿ã¤ã“ã¨ãŒã§ãã¾ã™ã€‚
「017 インターフェイスã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント