main(List<String> args) {
sayHello("name");
sayHello2("name", 18, 1.88);
sayHello2("name", 18);
sayHello3("name", age: 20, height: 1.88);
sayHello3("name", age: 20);//參數可省略
}
複製代碼
void sayHello(String name) {
print(name);
}
複製代碼
只有可選參數能夠給默認值markdown
[] 裏面可省略ide
void sayHello2(String name, [int age = 10, double height = 1.0]) {
}
複製代碼
{} 裏可省略,但調用必須是標籤參數調用函數
void sayHello3(String name, {int age = 20, double height = 2.0}) {
}
複製代碼
main(List<String> args) {
var p = Person("Joho", 30);
var p2 = Person("Joho", 30);
var p3 = Person.withNameAndAge("Joho", 18);
var map = {'name': 'kobe', 'age': 30};
var p4 = Person.fromMap(map);
}
class Person {
String name;
int age;
double height;
}
複製代碼
Person(String name, int age) {
this.name = name;
this.age = age;
}
複製代碼
Person(this.name, this.age);
複製代碼
Person.withNameAndAge(String name, int age) {
this.name = name;
this.age = age;
}
複製代碼
Person.fromMap(Map<String, Object> map) {
this.name = map["name"];
this.age = map["age"];
}
複製代碼
class Person {
final String name;
final int age;
//類的初始化列表
Person(this.name) : age = 10;
//或
Person(this.name, {this.age = 10});
}
複製代碼
關鍵字: extendsui
class Person {
String name;
int age;
Person(this.name, this.age);
}
class Student extends Person {
String id;
// 繼承父類 name、age 屬性,調用 super 構造方法
Student(this.id, String name, int age) : super(name, age);
}
複製代碼
關鍵字: abstractthis
abstract class Shape {
double area();
String getInfo() {
return "shape";
}
}
class Square extends Shape {
@override
double area() {
return 100.0;
}
@override
String getInfo() {
return "square";
}
}
複製代碼
總結
spa
爲何 Map 能夠實例化
var map = Map();
map["name"] = "Joho";
print(map);
複製代碼
Map 是抽象類,但卻能夠實例化,緣由在於 external factory Map();
code
external 關鍵字 能夠把 聲明和 實現分離,需配合註解 @patch 實現
orm
@patch 能夠針對不一樣平臺進行實現
繼承
見: map_patch.dart接口
dart 沒有 interface、protocol 這樣的關鍵字表示接口,可是默認的全部類都至關於接口,dart 不支持多繼承
在開發中,一般使用 abstract 用於給別人實現的類聲明爲抽象類
複製代碼
main(List<String> args) {
final sm = SuperMan();
sm.run();
sm.fly();
}
abstract class Runner {
run();
}
abstract class Flyer {
fly();
}
class SuperMan implements Runner, Flyer {
@override
run() {
print("SuperMan is running");
}
@override
fly() {
print("SuperMan is flying");
}
}
複製代碼
在經過 implements 實現某個類時,類中全部的方法都必須被從新實現,可是某些時候,一個類可能但願直接複用以前類的實現方案,這就須要藉助於 mixin 關鍵字,
藉助於 mixin 關鍵字定義一個類,藉助於 with 關鍵字來進行混入。
main(List<String> args) {
final sw = SuperWoman();
sw.run();
sw.fly();
}
mixin Runner {
run();
}
mixin Flyer {
fly();
}
// implements 的方式必需要對其中的方法進行 onverride
class SuperMan implements Runner, Flyer {
@override
run() {}
@override
fly() {}
}
// with 關鍵字 則不須要 override
class SuperWoman with Runner, Flyer {
run() {
print("Superwoman is running");
}
fly() {
print("Superwoman is flying");
}
}
複製代碼