// 抽象クラス 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 width;
private double height;
// コンストラクタ
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
// calculateArea() メソッドã®å®Ÿè£…
@Override
public double calculateArea() {
return width * height; // 長方形ã®é¢ç©ã®è¨ˆç®—
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Circle クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—㦠calculateArea() メソッドを呼ã³å‡ºã™
Circle myCircle = new Circle(5.0);
System.out.println("円ã®é¢ç©: " + myCircle.calculateArea());
// Rectangle クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—㦠calculateArea() メソッドを呼ã³å‡ºã™
Rectangle myRectangle = new Rectangle(4.0, 6.0);
System.out.println("長方形ã®é¢ç©: " + myRectangle.calculateArea());
}
}
ã“ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€Shape ã‚¯ãƒ©ã‚¹ãŒæŠ½è±¡ã‚¯ãƒ©ã‚¹ã¨ã—ã¦ã€calculateArea() ãƒ¡ã‚½ãƒƒãƒ‰ãŒæŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã¨ã—ã¦å®£è¨€ã•れã¦ã„ã¾ã™ã€‚ãã—ã¦ã€Circle クラス㨠Rectangle クラスãŒãれãžã‚Œ Shape クラスを継承ã—ã€calculateArea() メソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦å††ã‚„長方形ã®é¢ç©ã‚’計算ã—ã¦ã„ã¾ã™ã€‚main メソッドã§ã¯ã€ãれãžã‚Œã®ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’作æˆã—ã¦é¢ç©ã‚’計算ã—ã€çµæžœã‚’表示ã—ã¦ã„ã¾ã™ã€‚
抽象メソッドã®å¼·åˆ¶
抽象メソッドã¯ã€æŠ½è±¡ã‚¯ãƒ©ã‚¹å†…ã§å®£è¨€ã•れるメソッドã§ã‚りã€ãã®æœ¬ä½“(実装)ãŒå˜åœ¨ã›ãšã€ã‚µãƒ–クラスã«ã‚ˆã£ã¦å®Ÿè£…ã•れãªã‘れã°ãªã‚‰ãªã„メソッドã§ã™ã€‚以下ã«ã€æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã®å¼·åˆ¶çš„ãªå®Ÿè£…ã«ã¤ã„ã¦è§£èª¬ã—ã¾ã™ã€‚
抽象メソッドã®å®£è¨€:
抽象メソッドã¯ã€æŠ½è±¡ã‚¯ãƒ©ã‚¹å†…ã§ãƒ¡ã‚½ãƒƒãƒ‰ã®å®šç¾©ã ã‘ãŒã•ã‚Œã€æœ¬ä½“ãŒè¨˜è¿°ã•れã¾ã›ã‚“。ã“れã«ã‚ˆã‚Šã€æŠ½è±¡ã‚¯ãƒ©ã‚¹ãŒãã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’直接実装ã™ã‚‹ã“ã¨ãŒã§ããªããªã‚Šã¾ã™ã€‚
abstract class Animal {
// 抽象メソッドã®å®£è¨€
public abstract void makeSound();
}
サブクラスã§ã®å®Ÿè£…ã®å¼·åˆ¶:
抽象メソッドãŒå˜åœ¨ã™ã‚‹æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚’継承ã™ã‚‹å…·è±¡ã‚¯ãƒ©ã‚¹ã¯ã€ãã®æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã‚’ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦å®Ÿè£…ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ã“れã«ã‚ˆã‚Šã€æŠ½è±¡ã‚¯ãƒ©ã‚¹ã‚’継承ã™ã‚‹ã™ã¹ã¦ã®ã‚µãƒ–クラスãŒã€å…±é€šã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æä¾›ã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚
class Dog extends Animal {
// 抽象メソッドã®å®Ÿè£…
@Override
public void makeSound() {
System.out.println("ワンワン");
}
}
メソッドã®å…·ä½“çš„ãªæ©Ÿèƒ½ã®æä¾›:
ã‚µãƒ–ã‚¯ãƒ©ã‚¹ã§æŠ½è±¡ãƒ¡ã‚½ãƒƒãƒ‰ã‚’å®Ÿè£…ã™ã‚‹ã“ã¨ã§ã€å„サブクラスãŒå…·ä½“çš„ãªæ©Ÿèƒ½ã‚’æä¾›ã§ãã¾ã™ã€‚ã“ã®å…·ä½“çš„ãªæ©Ÿèƒ½ãŒã€å„ã‚µãƒ–ã‚¯ãƒ©ã‚¹ãŒæ‹…当ã™ã‚‹å½¹å‰²ã‚„特性ã«å¿œã˜ã¦ç•°ãªã‚‹ã“ã¨ãŒæœŸå¾…ã•れã¾ã™ã€‚
class Cat extends Animal {
// 抽象メソッドã®å®Ÿè£…
@Override
public void makeSound() {
System.out.println("ニャー");
}
}
ãƒãƒªãƒ¢ãƒ¼ãƒ•ã‚£ã‚ºãƒ ã®æ´»ç”¨:
抽象メソッドを介ã—ã¦ãƒãƒªãƒ¢ãƒ¼ãƒ•ィズムãŒå®Ÿç¾ã•れã¾ã™ã€‚抽象クラスã®åž‹ã‚’æŒã¤å¤‰æ•°ã¯ã€ãã®å…·è±¡ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’代入ã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®æŸ”軟性ãŒå‘上ã—ã€ç•°ãªã‚‹ã‚µãƒ–クラスã®ã‚ªãƒ–ジェクトを共通ã®åŸºåº•クラスã¨ã—ã¦æ‰±ãˆã¾ã™ã€‚
Animal myAnimal = new Dog();
myAnimal.makeSound(); // 実際ã«ã¯ Dog クラス㮠makeSound() ãŒå‘¼ã°ã‚Œã‚‹
抽象メソッドを使用ã™ã‚‹ã“ã¨ã§ã€ã‚¯ãƒ©ã‚¹éšŽå±¤æ§‹é€ ã‚’è¨è¨ˆã—ã€ç•°ãªã‚‹ã‚µãƒ–クラスãŒå…±é€šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæä¾›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ—ãƒã‚°ãƒ©ãƒ ã®æ§‹é€ ãŒæ•´ç†ã•ã‚Œã€æ‹¡å¼µã‚„メンテナンスãŒå®¹æ˜“ã«ãªã‚Šã¾ã™ã€‚
「016 抽象クラスã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント