ワタタク
今回の記事の目的はProcessingの「継承」を理解し、自分なりに使ってみること。
目次
【Processing】継承について
継承について
- 継承という言葉の意味:継承とは、他のものから受け継いで使うこと
- 継承の英語は「Inheritance」
- Processingでの継承とは、既存のクラス(例えば、動物クラス)から新しいクラス(例えば、犬クラス)を作ることです。この新しいクラスは、元のクラスの特徴や動きを受け継ぎます。
- 既存のクラスのことをスーパークラス・元のクラス・親クラスとも言う
- 新しいクラスのことをサブクラス・子クラスとも言う
- 継承を使うと、例えば、動物園を作るときに全ての動物に共通の動きを持たせつつ、各動物に独自の動きを追加することができます
- 【注意点】継承を使うときは、新しいクラス(犬クラス)が元のクラス(動物クラス)のすべての特徴を持つので、不要な特徴も引き継がないように気をつける必要がある
僕は親クラス・子クラスって言い方の方が分かりやすいな。
【Processing】継承の書き方【構文】
継承の書き方【構文】
class 新しいクラス extends 元のクラス {
// 独自の特徴や動きをここに追加する
}
例
class Dog extends Animal{
// 独自の特徴や動きをここに追加する
}
【Processing】継承の使い方【画像とコード】
【1】既存のクラスから新しいクラスを作り、コンソールに表示させる
// Animalクラスを定義。動物の基本的な動作を含む
class Animal {
void eat() {
println("This animal eats food."); // 食べる動作を出力
}
}
// Animalクラスを継承したDogクラスを定義。犬の特有の動作を追加
class Dog extends Animal {
void bark() {
println("This dog barks."); // 吠える動作を出力
}
}
// setup関数を定義。コードの実行部分
void setup() {
Dog myDog = new Dog(); // Dogクラスのインスタンスを作成
myDog.eat(); // Animalクラスから継承したメソッドを呼び出し
myDog.bark(); // Dogクラス独自のメソッドを呼び出し
}
【2】既存のクラスから新しいクラスを作り、イラストに機能を加える
既存のBoxクラス(スーパークラス・親クラス)に、ideaというテキストを表示させる新機能(サブクラス・子クラス)を追加してみた。
// オブジェクトの宣言
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 TextBox(); // 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); // 円を描きます
rect(mybox.x, mybox.y, mybox.diameter, mybox.diameter); // 四角形を描きます
mybox.displayText(); // テキストを表示します
}
// 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 displayText() {
// 何もしない
}
}
// TextBoxクラス (Boxクラスのサブクラス)
class TextBox extends Box {
void displayText() {
fill(0); // 黒色で描画
textAlign(CENTER, CENTER);
textSize(32); // テキストサイズを大きく
text("idea", x + diameter / 2, y + diameter / 2); // テキストを表示
}
}
【Processing】継承を使ってみた感想
元のクラスに、新しい機能を付け加えることで「このクラスにこんな機能を加えているんだな」と思えて、かなり可読性があがるなぁ。と感じました。
クラスの使い方がまた1つ上達できました。
それでは今日もレッツワクワクコーディング。