// 抽象クラス Shape
abstract class Shape {
// 抽象メソッド calculateArea を宣言
public abstract double calculateArea();
}
// 具象クラス Circle
class Circle extends Shape {
private double radius;
// コンストラクタ
public Circle(double radius) {
this.radius = radius;
}
// calculateArea メソッドã®å®Ÿè£…
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
// 具象クラス Rectangle
class Rectangle extends Shape {
private double length;
private double width;
// コンストラクタ
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
// calculateArea メソッドã®å®Ÿè£…
@Override
public double calculateArea() {
return length * width;
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Circle クラスã®åˆ©ç”¨ä¾‹
Circle circle = new Circle(5.0);
System.out.println("Circle Area: " + circle.calculateArea());
// Rectangle クラスã®åˆ©ç”¨ä¾‹
Rectangle rectangle = new Rectangle(4.0, 6.0);
System.out.println("Rectangle Area: " + rectangle.calculateArea());
}
}
ã“ã®ä¾‹ã§ã¯ã€Shape ã‚¯ãƒ©ã‚¹ãŒæŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ calculateArea() を宣言ã—ã¦ã„ã¾ã™ã€‚ãれを継承ã™ã‚‹å…·è±¡ã‚¯ãƒ©ã‚¹ Circle 㨠Rectangle ãŒã€ãれãžã‚Œã®å½¢çжã«å¯¾ã™ã‚‹é¢ç©ã‚’計算ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã—ã¦ã„ã¾ã™ã€‚Main クラスã§ãれãžã‚Œã®ã‚¯ãƒ©ã‚¹ã‚’インスタンス化ã—㦠calculateArea() を呼ã³å‡ºã™ã“ã¨ã§ã€å„形状ã®é¢ç©ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
å‡ºåŠ›çµæžœï¼š
Circle Area: 78.53981633974483
Rectangle Area: 24.0
抽象メソッドã¨å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰
抽象メソッドã¨å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€Javaã«ãŠã„ã¦ã‚ªãƒ–ジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã®ä¸ã§é‡è¦ãªæ¦‚念ã§ã™ã€‚ã“れらã¯ã€æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚„インターフェースを通ã˜ã¦åˆ©ç”¨ã•れã€ç¶™æ‰¿ã‚„実装ã«ãŠã„ã¦å½¹ç«‹ã¡ã¾ã™ã€‚
抽象メソッド:
- 定義:
- 抽象メソッドã¯ãƒ¡ã‚½ãƒƒãƒ‰ã®æœ¬ä½“(実装)ãŒãªã„メソッドã§ã™ã€‚
- 宣言ã®ã¿ã‚’å«ã¿ã€ãƒ¡ã‚½ãƒƒãƒ‰ã®å‹•作ãŒå…·ä½“çš„ãªã‚¯ãƒ©ã‚¹ã§å®šç¾©ã•れã¾ã™ã€‚
- 宣言:
- æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯æŠ½è±¡ã‚¯ãƒ©ã‚¹ã¾ãŸã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã§å®£è¨€ã•れã¾ã™ã€‚
- 抽象メソッドをå«ã‚€ã‚¯ãƒ©ã‚¹ã¯ã€ãã®ã‚¯ãƒ©ã‚¹è‡ªä½“も抽象ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
- サブクラスã§ã®å®Ÿè£…:
- 抽象クラスを継承ã™ã‚‹ã‚µãƒ–クラスã¯ã€æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装(オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ï¼‰ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
- インターフェースã®å ´åˆã‚‚åŒæ§˜ã§ã€å®Ÿè£…クラスã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
- 利点:
- 抽象メソッドを使用ã™ã‚‹ã“ã¨ã§ã€ç•°ãªã‚‹ã‚µãƒ–クラスã§åŒã˜ãƒ¡ã‚½ãƒƒãƒ‰åã‚’æŒã¡ã¤ã¤ã€å€‹ã€…ã®ã‚¯ãƒ©ã‚¹ã«åˆã£ãŸç‹¬è‡ªã®æŒ™å‹•を実ç¾ã§ãã¾ã™ã€‚
abstract class Shape {
public abstract double calculateArea();
}
具象クラス Circle ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã€calculateArea() メソッドを呼ã³å‡ºã—ãŸçµæžœã€å††ã®é¢ç©ãŒè¨ˆç®—ã•れã¦è¡¨ç¤ºã•れã¾ã™ã€‚åŒæ§˜ã«ã€å…·è±¡ã‚¯ãƒ©ã‚¹ Rectangle ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã€calculateArea() メソッドを呼ã³å‡ºã—ãŸçµæžœã€é•·æ–¹å½¢ã®é¢ç©ãŒè¨ˆç®—ã•れã¦è¡¨ç¤ºã•れã¾ã™ã€‚
具象メソッド:
- 定義:
- 具象メソッドã¯ãƒ¡ã‚½ãƒƒãƒ‰ã®æœ¬ä½“(実装)をæŒã¤é€šå¸¸ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã™ã€‚
- 通常ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¨åŒæ§˜ã«ã€ãƒ¡ã‚½ãƒƒãƒ‰ã®å‹•ä½œãŒæ—¢ã«å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚
- クラス内ã§ç›´æŽ¥ä½¿ç”¨:
- å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚„é€šå¸¸ã®ã‚¯ãƒ©ã‚¹å†…ã§ç›´æŽ¥ä½¿ç”¨ã•れã¾ã™ã€‚
- サブクラスã§ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れるã“ã¨ãªãã€ãã®ã¾ã¾ä½¿ç”¨ã•れã¾ã™ã€‚
- オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰:
- 抽象クラス内ã®å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚µãƒ–クラスã«ã‚ˆã£ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れるã“ã¨ãŒã‚りã¾ã™ã€‚
- オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã«ã‚ˆã‚Šã€ã‚µãƒ–クラスã¯è¦ªã‚¯ãƒ©ã‚¹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å†å®šç¾©ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- 利点:
- å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ—¢å˜ã®å®Ÿè£…ã‚’æä¾›ã™ã‚‹ãŸã‚ã€ã‚µãƒ–クラスã§ç‰¹åˆ¥ãªå‹•作ãŒå¿…è¦ãªã„å ´åˆã¯ãã®ã¾ã¾ä½¿ç”¨ã§ãã¾ã™ã€‚
abstract class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
抽象メソッドã¨å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚ªãƒ–ジェクト指å‘プãƒã‚°ãƒ©ãƒŸãƒ³ã‚°ã«ãŠã„ã¦æŸ”軟性ã¨å†åˆ©ç”¨æ€§ã‚’æä¾›ã—ã¾ã™ã€‚抽象メソッドã¯ç‰¹å®šã®ã‚¯ãƒ©ã‚¹ã«å›ºæœ‰ã®æŒ™å‹•ã‚’è¦æ±‚ã—ã€å…·è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ—¢å˜ã®å®Ÿè£…ã‚’æä¾›ã—ã¦å†åˆ©ç”¨ã‚’å¯èƒ½ã«ã—ã¾ã™ã€‚
「016 抽象クラスã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント