【Processing】オーバーライドの使い方【親クラスのメソッドを子クラスが自分のやり方で上書きすること】

【Processing】オーバーライドの使い方【親クラスのメソッドを子クラスが自分のやり方で上書きすること】
  • URLをコピーしました!
ワタタク

今回の記事の目的はProcessingの「オーバーライド」を理解し、自分なりに使ってみること。

この記事を書いた人

クリエイティブコーダー Watataku のプロフィール写真
ワタタク(Watataku)

上達の研究家 / アーティスト

「才能」ではなく「発見」で描く。文系・36歳からの上達ハック。

  • ゼロから独学でクリエイティブコーディングに挑戦し、以下の実績を達成
    • 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
      • KITTE大阪の18メートルあるAxCROSS大型スクリーン
      • 虎ノ門ヒルズステーションタワーB2F TOKYO NODE エントランスサイネージで展示
      • UN:O(東京大手町)にある会員限定のサテライトオフィスにて2作品常設展示
    • 開始1年9ヶ月目に、虎ノ門ヒルズ49階、地上250mのインフィニティプールへ作品提供・展示
  • 【上達の秘密】

記事内のProcessingのバージョンは4.3。

目次

【Processing】オーバーライドについて

オーバーライドについて
  • オーバーライドは、英語でoverride
  • Processingでのオーバーライドとは、親クラス(例えば、動物クラス)のメソッドを子クラス(例えば、犬クラス)が自分のやり方で上書きすること
  • 【注意点】オーバーライドを使うときは、親クラスのメソッドを完全に上書きするので、元の動作が必要なくなった場合に注意が必要。
    • @Overrideアノテーションを使うことで、意図的に上書きしていることを明示すると読みやすくなる

【Processing】オーバーライドの使い方【画像とコード】

【1】オーバーライドした例

【1】オーバーライドした例
class Animal {
  void eat() {
    println("This animal eats food.");
  }
}

class Dog extends Animal {
  @Override
  void eat() {
    println("This dog eats food in its own way.");
  }
}

void setup() {
  Dog myDog = new Dog();
  myDog.eat();  // Animalクラスのeatメソッドを上書きしたDogクラスのeatメソッドを使う
}

【2】図形表現でオーバーライドを使う

【2】図形表現でオーバーライドを使う
// オブジェクトの宣言
Ball myball;
Box mybox;

void setup() {
  size(400, 400);
  background(0);
  noStroke();
  
  // オブジェクトのインスタンス化
  myball = new Ball();
  myball.x = 200; //(xは200ですって情報)
  myball.y = 200; //(yは200ですって情報)
  myball.diameter = 100; //(diameterは100って情報)
  
  mybox = new ColoredBox(); // Boxクラスのサブクラスを使います
  mybox.x = 250; //(xは250ですって情報)
  mybox.y = 250; //(yは250ですって情報)
  mybox.diameter = 100; //(diameterは100って情報)
  
  noLoop(); // draw()関数を1回だけ実行
}

void draw() {
  background(0); // 背景を再設定
  ellipse(myball.x, myball.y, myball.diameter, myball.diameter); // 円を描きます
  mybox.draw(); // 四角形を描きます
}

// Ballクラス
class Ball {
  int x, y; // フィールド:ボールの位置を表す変数
  int diameter; // フィールド:ボールの大きさを表す変数

  // コンストラクタ
  Ball() {
    x = 0;
    y = 0;
    diameter = 50;
  }
}

// Boxクラス
class Box {
  int x, y; // フィールド:ボックスの位置を表す変数
  int diameter; // フィールド:ボックスの大きさを表す変数

  // コンストラクタ
  Box() {
    x = 0;
    y = 0;
    diameter = 50;
  }

  void draw() {
    rect(x, y, diameter, diameter); // 四角形を描きます
  }
}

// ColoredBoxクラス (Boxクラスのサブクラス)
class ColoredBox extends Box {
  @Override
  void draw() {
    fill(255, 165, 0); // オレンジ色で描画
    rect(x, y, diameter, diameter); // 四角形を描きます
  }
}

【Processing】オーバーライドを使うメリット

オーバーライドを使って上書きすることには、大きな意味があります。

簡単に言うと、親クラスの基本動作を持ちながら、子クラスでその動作を自分なりに変えられるからです。

  1. 個別の動作を追加できる:例えば、動物クラスには「食べる」という動作があります。それを犬クラスでオーバーライドすると、「犬は骨を食べる」など、犬特有の食べ方を追加できます。
  2. 柔軟性が増す:オーバーライドを使うと、一つの共通ルールを持ちながら、状況に応じて特定の動作を変えることができます。例えば、ゲームでいろんなキャラクターが共通の動きをしながら、キャラクターごとに違った特技を持たせることができます。
  3. コードの再利用ができる:親クラスで一度書いたコードをそのまま子クラスで使えるので、同じコードを何度も書く必要がありません。
  4. プログラムがわかりやすくなる:オーバーライドを使うことで、プログラムが整理されて、どの部分が基本的な動作で、どの部分が特定の動作かが明確になります。

【Processing】オーバーライドを使ってみた感想

@Overrideと書くのは新鮮だった。

どこでオーバライドしているのか分かりやすいし、読みやすくなる。

オーバーライド。使いこなしていこうと思います。

ワタタク

それでは今日もレッツワクワクコーディング。

ワタタク(Watataku)
上達の研究家 / アーティスト
独学1年9ヶ月で虎ノ門ヒルズ49階、地上250mのインフィニティプールへ作品提供・展示

言葉×コード×手書き。三位一体の表現が成長する過程の記録

【発信】クリエイティブコーディング(2024.3~) / 絵(2025.11~) / モレスキン / 思考法 / 生き方

▼運営者について
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次