クラスとインスタンスを示し、重要な3大要素を示す。
1.クラス
クラスは「設計図」と言われ
抽象的な「概念」を指す
分からない言葉を分からない言葉で説明されても理解できない
「仕様書」、「説明書」と読み替えてみる
クラスは「設計図」と言われ
抽象的な「概念」を指す
分からない言葉を分からない言葉で説明されても理解できない
「仕様書」、「説明書」と読み替えてみる
クラスの例を2つ挙げる(House、Human)
class House {
// 属性
String layout; // 間取り
int floors; // 階層
String wallColor; // 壁の色
String construction; // 造り
// 各種メソッドがここへ
}
class Human {
// 属性
String name; // 氏名
int age; // 年齢
String gender; // 性別
// 各種メソッドがここへ
}
2.インスタンス
インスタンスは「実体」と言われ
具体的な「モノ」を指す
分からない言葉を分からない言葉で説明されても理解できない
「データ」、「プログラム」と読み替えてみる
インスタンスの例を2つ挙げる(House、Human)
House
間取り:2LDK
階層:2階建て
壁の色:白系統
造り:鉄筋コンクリート造
Human
山田さん(23歳男性)
田中さん(50歳女性)
佐藤さん(2歳男の子)
3.継承
オブジェクト思考の1/3の要素
あるクラスを引き継いで、新しいクラスを作成すること
継承の例
底辺と高さの2つの属性を持つ図形
Figureクラスを示す
面積を求めるcalcAreaメソッドを定義している
public abstract class Figure{
private int teihen;
private int takasa;
public abstract int calcArea();
}
calcAreaメソッドの中身
戻り値の型とメソッド名のみを定義する抽象メソッド
抽象メソッドを持つクラスを抽象クラス(abstract)という
次に四角形・三角形のクラスを示す
// 四角形(Rectangle)
public class Rectangle extends Figure{
@Override
public int calcArea(){
return this.teihen * this.takasa;
}
}
// 三角形(Triangle)
public class Triangle extends Figure{
@Override
public int calcArea(){
return this.teihen * this.takasa / 2;
}
}
Figureクラスを継承することで、
Figureの派生版クラスRectangleとTriangleを実装する
親:Figure、子:Rectangle,Triangle
calcAreaメソッドの中身
三角形と四角形での面積を求める公式は異なるため
Figureではメソッドの枠組みだけ提供
継承先で親クラスのメソッドを上書き(Override)する
実際の使用例
Rectangle rect = new Rectangle();
rect.teihen = 3;
rect.takasa = 4;
System.out.println(rect.calcArea());// 12が表示される
Triangle tri = new Triangle();
tri.teihen = 4;
tri.takasa = 5;
System.out.println(tri.calcArea());// 10が表示される
4.カプセル化
オブジェクト思考の1/3の要素
オブジェクトの持つ変数などを隠蔽すること
変数などの値を参照・更新できる範囲を定義すること
Humanクラスが定義されている時
public class Human {
// 属性
public String name; // 氏名
private int age; // 年齢
public String gender; // 性別
//コンストラクタ
public Human(String name, int age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
}
}
public class Main{
public static void main(String[] args){
//Humanクラスのインスタンスを生成
Human tanaka = new Human("田中", 30, "男");
//できることは
tanaka.name = "佐藤";
//できないことは
tanaka.age = 50;
}
}
Humanクラスにおけるカプセル化(隠蔽)の例
’name’はpublicで定義されているため、外部のクラスから参照・変更が可能
’age’はprivateで定義されているため、自クラスからのみアクセス可能
5.多態性(polymorphism)
オブジェクト思考の1/3の要素
メソッドの呼び出しに対して、
オブジェクト毎に異なる機能や動作をすること
’多’くの 振る舞い(’態’) を持つ ‘性’質 と考える
例題(抽象クラスが1つ、継承クラスが2つ)
public abstract class Animal{
public abstract void bark();
}
public class Dog extends Animal{
public void bark(){
System.out.println("わん!");
}
}
public class Cat extends Animal{
public void bark(){
System.out.println("にゃー!");
}
}
これを動かす
public class Main{
public static void main(String[] args){
//Animalの子クラスをインスタンス化
Dog dog = new Dog();
Cat cat = new Cat();
//listに格納
List<Animal> animals = new ArrayList<Animal>();
animals.add(dog);
animals.add(cat);
//それぞれ鳴かせる \わん!/ \にゃー!/
animals.forEach(animal -> animal.bark());
}
}
繰り返し文(forEach)で各インスタンスのbarkメソッドを呼ぶ
犬と猫ごとに違う鳴き声を発する