🐙
ケツリカ(結論から理解)する Class内用語集
自分が分からなくなったとき用のやつです
inheritance and extends (継承と拡張)
継承とは
拡張とは
最小限の例(java)
// 基底クラス
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
// 派生クラス
class Dog extends Animal {
void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound(); // 出力: Bark
}
}
constructor (コンストラクタ)
最小限の例(java)
class Person {
String name;
int age;
// コンストラクタ
Person(String name, int age) {
this.name = name;
this.age = age;
}
void displayInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
public class Main {
public static void main(String[] args) {
// コンストラクタを使ってPersonオブジェクトを作成
Person person = new Person("Alice", 30);
person.displayInfo(); // 出力: Name: Alice, Age: 30
}
}
abstract class and method (抽象クラスと抽象メソッド)
抽象クラスとは
抽象メソッドとは
最小限の例(python)
from abc import ABC, abstractmethod
# 抽象クラスの定義
class Animal(ABC):
@abstractmethod
def makeSound(self):
pass # 具体的な実装は継承クラスで行う
# 具体的なクラス
class Dog(Animal):
def makeSound(self):
print("Woof")
class Cat(Animal):
def makeSound(self):
print("Meow")
# インスタンス化とメソッド呼び出し
dog = Dog()
cat = Cat()
dog.makeSound() # 出力: Woof
cat.makeSound() # 出力: Meow
実際問題どうやって使われるのか(ゲーム開発の例)
from abc import ABC, abstractmethod
class GameObject(ABC):
@abstractmethod
def update(self):
pass
@abstractmethod
def draw(self):
pass
class Player(GameObject):
def update(self):
# プレイヤーの位置を更新するコード
print("Player updating")
def draw(self):
# プレイヤーを描画するコード
print("Player drawing")
class Enemy(GameObject):
def update(self):
# 敵の位置を更新するコード
print("Enemy updating")
def draw(self):
# 敵を描画するコード
print("Enemy drawing")
# ゲームループでの利用
objects = [Player(), Enemy()]
for obj in objects:
obj.update()
obj.draw()
interface and implement (インターフェースと実装)
インターフェースとは
実装とは
主に以下の言語で使われます
-Java
-C#
-TypeScript
-Go
-Swift
です。
最小限の例(java)
interface Animal {
void makeSound(); // 抽象メソッド
void sleep(); // 抽象メソッド
}
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof");
}
@Override
public void sleep() {
System.out.println("Dog is sleeping");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 出力: Woof
dog.sleep(); // 出力: Dog is sleeping
}
}
encapsulation (カプセル化)
なぜ、直接クラスのフィールドに触れてはダメなのか
→不正な値が入る可能性が出てきたりするため
危険な例(java)
class Person {
public int age;
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.age = -5; // 不正な値を設定
System.out.println("Age: " + person.age); // 出力: Age: -5
}
}
カプセル化後(java)
class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
} else {
System.out.println("Invalid age value");
}
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setAge(-5); // 不正な値は設定されない
System.out.println("Age: " + person.getAge()); // 出力: Age: 0
}
}
polymorphism (ポリモーフィズム)
最小限の例(java)
// 基底クラス
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
// 派生クラス
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
// ポリモーフィズムのデモ
public class Main {
public static void main(String[] args) {
// Animal型の配列にDogとCatのインスタンスを格納
Animal[] animals = {new Dog(), new Cat()};
// 各Animalに対してmakeSoundメソッドを呼び出す
for (Animal animal : animals) {
animal.makeSound(); // 出力: Bark と Meow
}
}
}
Discussion