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

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

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

この記事を書いた人

ワタタク(Watataku)
  • クリエイティブコーダー / アーティスト
  • 「人の心に寄り添う、機能するアート」を探究しています
  • アートとテクノロジーが、社会や個人のウェルビーイングにどう貢献できるかに、関心があります

記事内の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)
クリエイティブコーダー/アーティスト
AIと共に、「人の心に寄り添う、機能するアート」を探究しています。

ここは、その思索と創造の全記録を記す、思考の実験室(アトリエ)です。

僕の創作の源泉は、人生経験そのものです。
不当な出来事や、精神的な支配の中で、私の心は何度も粉々に砕け散りました。しかし、その一つ一つの破片をどのようにすれば鮮やかな絵の具にできるかを考え、ゆっくり心のパレットに色を整えていきました。その、長い、長い、自身との対話の果てに「人の役に立つアートを作りたい」という考え方にたどり着きました。

かつて、僕の武器は、アコースティックギター弾き語りと、カメラでした。
オリジナルソングの演奏でお客様投票1位となった「物語の力」。
世界20カ国の旅で培った、多様な「視点」。

今、僕は、それら全ての経験を、「コード」という、新しい言語で、世界に問いかけています。

このブログでは、作品の制作過程や、日々の発見、そして、僕自身の上達の軌跡を記録していきます。

僕の旅が、あなたの日常を、ほんの少しでも豊かにするための、光になることを願って。

クリエイティブコーディングロード運営者 ワタタク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次