はじめに
Google I/O 2023でDart3のリリースが報告されました。 Dart3でClass Modifierが追加されたので試してみました。 (Class Modifierとは、抽象Classの頭につけているabstractなどです)
interfaceクラス
// vehicle.dart interface class Vehicle { void drive() { print('drive'); } }
このVehicleクラスが定義されたファイルとは別ファイルで使う場合に下記の特長があります。
- インスタンス化できる
- 継承できない
- implementsできる
// car.dart import 'vehicle.dart'; // インスタンス化できる final myCar = Vehicle(); // 継承できない(エラーになる) class Car extends Vehicle { String name; Car({ required this.name, }) : super(); } // implementsできる class Truck implements Vehicle { String name; Truck({ required this.name, }) : super(); @override void drive() { print('drive truck'); } }
baseクラス
// vehicle.dart base class Vehicle { void drive() { print('drive'); } }
このVehicleクラスが定義されたファイルとは別ファイルで使う場合に下記の特長があります。
- インスタンス化できる
- 継承できる。ただし、base or finalのクラスに限る
- implementsできない
// car.dart import 'vehicle.dart'; // インスタンス化できる final myCar = Vehicle(); // 継承できる。base or finalでなければならない base class Car extends Vehicle { String name; Car({ required this.name, }) : super(); } final class Bus extends Vehicle { } // implementsできない base class Truck implements Vehicle { String name; Truck({ required this.name, }) : super(); @override void drive() { print('drive truck'); } }
finalクラス
// vehicle.dart final class Vehicle { void drive() { print('drive'); } }
このVehicleクラスが定義されたファイルとは別ファイルで使う場合に下記の特長があります。
- インスタンス化できる
- 継承できない
- implementsできない
// car.dart import 'vehicle.dart'; // インスタンス化できる final myCar = Vehicle(); // 継承できない base class Car extends Vehicle { String name; Car({ required this.name, }) : super(); } // implementsできない base class Truck implements Vehicle { String name; Truck({ required this.name, }) : super(); @override void drive() { print('drive truck'); } }