Dartにおける class と object の使い方
Creating a class (classを作成)
class Car {
int numberOfWindows = 5;
void drive(){
print('wheels start turning');
}
}
Creating an Object from the Class (objectをclassから作成)
Car myCar = Car();
実際にclassとobjectを使ってCodeを書いてみましょう。
[Practice Here] (https://dartpad.dartlang.org/)
####1.各プロパティに、デフォルト値を設定したclassを作成するパターン
void main(){
// 2. class Carから, myNormalCar というObjectを作成。
Car myNormalCar = Car();
print(myNormalCar.numberOfSeat); // 4
}
// 1. Car という classを作る。
class Car {
// デフォルトとして、numberOfSeatを4, yearCreatedを2020とする。
numberOfSeat = 4;
yearCreated = 2020;
}
もし、毎回classを作成する度に、違うプロパティ値を表示させたいなら... => パターン2へ
2.デフォルト値を設定せずに、classを作成するパターン(Constructorを使って)。
void main(){
Car myNormalCar = Car(5, 2019);
Car hisCar = Car(2, 2016);
print(myNormalCar.numberOfSeat); // 5
print(myNormalCar.yearCreated); // 2019
print(hisCar.numberOfSeat); // 2
hisCar.whatToDo('Turn Left.'); // Turn Left
}
// Car classを作成。
class Car {
// 1. デフォルト値を設定しない。
int numberOfSeat;
int yearCreated;
// 2. Constructor method を使う。
Car(int numberOfSeat, int yearCreated){
// numberOfSeat は、Carというclassを作成する時に入力するように指示(thisは、Carというclassを指している)。
this.numberOfSeat = numberOfSeat;
this.yearCreated = yearCreated;
}
// 4. Methodを付け加える。
void function(String whatToDo){
print(whatToDo);
}
}
上のコードはさらに、簡潔に入力できる。
void main(){
// 2. プロパティネームを入れずに、値のみ順番に入力すれば良い。
Car myNormalCar = Car(5,2019);
Car hisCar = Car(2,2016);
print(myNormalCar.numberOfSeat); // 5
print(myNormalCar.yearCreated); // 2019
print(hisCar.numberOfSeat); // 2
}
class Car {
int numberOfSeat;
int yearCreated;
// {}を外す。
Car(this.numberOfSeat, this.yearCreated);
}
3. 既製されたclassの役割を、新たなclassに組み込む。
1. まず、Car というclassを作成し、そのclassからnormalCarというObjectを作成。
// まず、作成されたclassから、Objectを作成。
void main(){
Car normalCar = Car();
print(normalCar.numberOfSeat); // 5
normalCar.drive(); // wheels turn.
}
// まず、最初のclassを作成。
class Car {
int numberOfSeat = 5;
void drive(){
print('wheels turn.');
}
}
2. Cαrというベースのclassを用いて、新たにElectricCar(Carに比べて、さらに機能を持つ)というclassを作成。
void main(){
Car normalCar = Car();
print(normalCar.numberOfSeat); // 5
normalCar.drive(); // wheels turn.
ElectricCar myTesla = ElectricCar();
myTesla.drive(); // wheels turn
myTesla.recharge(); //
}
class Car {
int numberOfSeat = 5;
void drive(){
print('wheels turn.');
}
}
// Carより機能が多く搭載された、ElectricCarというclassを作成。
class ElectricCar extends Car {
int batteryLevel = 100;
void recharge(){
batteryLevel = 100;
}
}
3. 既製されたclassのメソッドの一部を書き換える。
void main(){
// 新たなObjectを作成。
LevitatingCar myMagLev = LevitatingCar();
myMagLev.drive(); // glide forward
}
// 新たなclass(LevitatingCar: 既存のCarのメソッドを受け継ぐが、drive()が違う)を作成。
class LevitatingCar extends Car {
// 既存の機能を書き換える
@override
void drive(){
print('glide forward');
}
}
4. 既存のメソッド(ここでは drive())に、更なる機能を付け加える。
void main(){
// 新たなObject myWaymoを作成。
SelfDrivingCar myWaymo = SelfDrivingCar('Osaka');
myWaymo.drive(); // wheels turn. sterring towards Osaka.
}
// 最初のベースとなるclassを作成。
class Car {
int numberOfSeat = 5;
void drive(){
print('wheels turn.');
}
}
// Carの機能を持つ、さらにパワフルなclass SelfDrivingCarというclassを作成。
class SelfDrivingCar extends Car {
String destination;
SelfDrivingCar(String userSetDestination){
destination = userSetDestination;
}
@override
void drive(){
// drive()の機能に、新たな機能を付け加える。
super.drive();
print('sterring towards $destination');
}
}
参照: The Complete 2020 Flutter Development Bootcamp with Dart.
(https://www.udemy.com/course/flutter-bootcamp-with-dart/learn/lecture/14483538#questions)