継承: コードの再利用
extends で継承。implements でインターフェース。
extends
クラスを継承。
implements
インターフェースを実装。
@Override
メソッドを上書き。
継承
// 親クラスpublic class Animal { protected String name;
public Animal(String name) { this.name = name; }
public void speak() { System.out.println("..."); }}
// 子クラスpublic class Dog extends Animal { public Dog(String name) { super(name); // 親コンストラクタ呼び出し }
@Override public void speak() { System.out.println(name + " says: Woof!"); }}
// 使用Animal dog = new Dog("Rex");dog.speak(); // Rex says: Woof!実行結果
Rex says: Woof!
Bad
// ❌ Bad: コードの重複class Cat { String name; void eat() { ... }}class Dog { String name; // 重複 void eat() { ... } // 重複}Good
// ✅ Good: 継承で共通化class Animal { String name; void eat() { ... }}class Cat extends Animal {}class Dog extends Animal {}パターン
// インターフェースpublic interface Drawable { void draw(); // 抽象メソッド
default void reset() { // デフォルト実装 System.out.println("Reset"); }}
public class Circle implements Drawable { @Override public void draw() { System.out.println("Drawing circle"); }}
// 抽象クラスpublic abstract class Shape { abstract double area(); // 子クラスで実装
public void describe() { // 共通実装 System.out.println("I'm a shape"); }}
// 複数インターフェースclass Widget implements Clickable, Draggable { // ...} Tip: 「継承より合成」— 継承を使いすぎない。
合格ライン
@Override を書ける
interface と abstract class の違いを説明できる
参考リンク
演習課題
課題1: 継承
Vehicle クラスを継承して Car と Bike を作成してください。
課題2: @Override
親クラスのメソッドをオーバーライドしてください。