Dart類與對象
使用命令行工具
創(chuàng)建新的工程flutter_oop
周霉,創(chuàng)建完成用Android Studio
工具打開
// 進(jìn)入桌面掂器,把flutter工程放在桌面上
$ cd /Users/wn/Desktop
// 創(chuàng)建flutter_oop工程,指定iOS工程語言為OC
$ flutter create -i objc flutter_oop
flutter_oop
工程中新建lg_person.dart
文件俱箱,我們來學(xué)習(xí)Dart的類和對象
<!-- lg_person.dart文件 -->
/**
* Dart中默認(rèn)會(huì)生成getter和setter方法
* 屬性和方法都通過.語法訪問
* final修飾的屬性必須定義初始值
* */
class LGPerson {
// 乃摹?表示屬性值可以為空
String? name;
int? age;
// 如果屬性沒有設(shè)置?可以為空,使用LGPerson(this.school);構(gòu)造的方式也可以防止報(bào)錯(cuò)
// String school;
// LGPerson(this.school);
// final修飾的屬性必須給初始值,如果不給初始值,也可以使用構(gòu)造方式防止報(bào)錯(cuò)LGPerson(this.type);
final String type = 'aa';
// 私有屬性,外界不能訪問
int? _height;
void run() {
print('name:$name age:$age');
// run方法內(nèi)部可以調(diào)用自己的對象 方法
_speak();
}
// 添加下劃線_ 就是私有方法鄙才,外界不能訪問
void _speak() {
print('type:$type');
}
// 對象方法不能重載叙甸,只要方法名相同僚祷,即便參數(shù)類型不同俺榆,也會(huì)報(bào)錯(cuò)
// 底層的原理是:方法的名稱是尋找方法的唯一標(biāo)識(shí)萍桌,這樣的編程語言就不能夠進(jìn)行方法的重載
// int run(int a, int b) {
// return a + b;
// }
}
// 添加全局函數(shù)
// 同一份文件中藕施,可以訪問私有屬性和似有方法
// 所謂的私有只是跨文件不能訪問
void test() {
LGPerson p = LGPerson();
p._height = 100;
p._speak();
}
//<!-- main.dart文件 -->
import 'package:flutter/material.dart';
// 導(dǎo)入lg_person頭文件
import 'lg_person.dart';
/**
* 類和對象
* 使用class關(guān)鍵字聲明一個(gè)類
* 可以使用new更上構(gòu)造函數(shù)
* 所有的對象都繼承Object類
* */
void main() {
LGPerson p = LGPerson();
p.name = 'a';
p.age = 18;
p.run();
// lg_person.dart文件中的全局函數(shù)test,在不同文件也可以訪問
test();
}
Dart的構(gòu)造函數(shù)
// 案例一:自定義構(gòu)造函數(shù)
<!-- lg_person.dart文件 -->
class LGPerson {
String? _name;
int? _age;
// 定義完類,會(huì)有一個(gè)默認(rèn)的構(gòu)造函數(shù);一旦定義構(gòu)造函數(shù)躺孝,默認(rèn)構(gòu)造函數(shù)就失去作用
// LGPerson (){}
// 自定義構(gòu)造函數(shù)
LGPerson (int age, String name) {
_name = name;
_age = age;
}
void run() {
print('name:$_name age:$_age');
}
}
//<!-- main.dart文件 -->
import 'package:flutter/material.dart';
// 導(dǎo)入lg_person頭文件
import 'lg_person.dart';
void main() {
LGPerson p = LGPerson(18, 'aaa');
p.run();
}
// 打印內(nèi)容
name:aaa age:18
// 案例二
<!-- lg_person.dart文件 -->
class LGPerson {
String? name;
int? _age;
// 自定義構(gòu)造函數(shù),構(gòu)造函數(shù)中的參數(shù)名稱與屬性名稱相同
LGPerson (int age, String name) {
name = name;
_age = age;
}
void run() {
print('name:$name age:$_age');
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'lg_person.dart';
void main() {
LGPerson p = LGPerson(18, 'aaa');
p.run();
}
// 打印內(nèi)容
name:null age:18
由于構(gòu)造函數(shù)中的參數(shù)名稱
與類的屬性名稱
相同秀存,就不知道name
到底指的是哪個(gè)澳盐,于是name
的打印結(jié)果是null
旬蟋。
// 解決方案一:Dart語法糖匆浙,構(gòu)造函數(shù)
LGPerson (this._age, this.name);
// 解決方案二:使用this語法
LGPerson (int age, String name) {
_age = age;
this.name = name;
}
// 打印內(nèi)容
name:aaa age:18
// 案例三:最終變量不能再次修改值
<!-- lg_person.dart文件 -->
class LGPerson {
String? name;
final int age;
LGPerson(this.age, this.name);
void changeAge(int age) {
this.age = age;
}
void run() {
print('name:$name age:$age');
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'lg_person.dart';
void main() {
LGPerson p = LGPerson(18, 'aaa');
p.run();
p.changeAge(20);
p.run();
}
// 因?yàn)閍ge屬性是最終變量软能,所以不能調(diào)用changeAge方法修改age值
- 'LGPerson' is from 'package:flutter_oop/lg_person.dart' ('lib/lg_person.dart').
Try correcting the name to the name of an existing setter, or defining a setter or field named 'age'.
this.age = age;
^^^
// 案例四:命名構(gòu)造函數(shù)
<!-- lg_person.dart文件 -->
class LGPerson {
String? name;
final int age;
LGPerson.whitName(this.name, this.age);
void run() {
print('name:$name age:$age');
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'lg_person.dart';
void main() {
LGPerson p = LGPerson.whitName('aaa', 18);
p.run();
}
// 打印內(nèi)容
name:aaa age:18
// 案例五:使用const修飾構(gòu)造函數(shù),創(chuàng)建常量對象
// 但一個(gè)對象的所有成員屬性都是用final修飾的時(shí)候,那么這個(gè)對象可以被創(chuàng)建為常量對象
class LGPerson {
final String name;
final int age;
const LGPerson(this.name, this.age);
void run() {
print('name:$name age:$age');
}
}
Dart的工廠構(gòu)造&單例對象&初始化列表
使用工廠構(gòu)造方法
構(gòu)造單例對象
,新建factory_class.dart
文件
<!-- factory_class.dart文件 -->
class FactoryClass {
// 需要一個(gè)單例對象
static FactoryClass? _instance;
// 重寫構(gòu)造函數(shù)
// 構(gòu)造函數(shù)是沒有return的讼呢,如果要想添加retrun,構(gòu)造函數(shù)前面需要添加factory修飾看蚜;如果不添加factory就沒有辦法return
// factory FactoryClass(){
// if(_instance == null) {
// _instance = FactoryClass._init();
// }
// // 防止為空音诫,強(qiáng)制解包
// return _instance!;
// }
// 對上面進(jìn)行優(yōu)化1
// factory FactoryClass(){
// _instance ??= FactoryClass._init();
// return _instance!;
// }
// 對上面進(jìn)行優(yōu)化2
// factory FactoryClass(){
// return _instance ??= FactoryClass._init();
// }
// 對上面進(jìn)行優(yōu)化3
factory FactoryClass() => _instance ??= FactoryClass._init();
// 私有的命名構(gòu)造函數(shù)
FactoryClass._init();
}
// main.dart文件
import 'package:flutter/material.dart';
import 'factory_class.dart';
void main() {
FactoryClass fact1 = FactoryClass();
FactoryClass fact2 = FactoryClass();
print(fact1 == fact2);
}
// 打印內(nèi)容
true
初始化列表
的使用穴吹,新建person.dart
文件
<!-- person.dart文件 -->
// :冒號后面就是初始化列表
// assert 校驗(yàn)傳遞的參數(shù)
// 初始化列表的目的:1. 給final變量賦值
// 2. 校驗(yàn)傳遞的參數(shù)
// 先執(zhí)行assert校驗(yàn)語句,再執(zhí)行this.語句淋淀,最后執(zhí)行print打印語句
class Person {
String name;
int age;
final height;
Person(this.name, this.age, int h)
: height = h,
assert(h >= 0),
assert(age >= 0) {
print('name=$name age=$age height=$height');
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_oop/person.dart';
void main() {
Person p = Person('aaa', -1, 180);
}
// 執(zhí)行報(bào)錯(cuò)
// 初始化age的值必須不小于0
Error: Assertion failed: file:///Users/wangning/Desktop/flutter_oop/lib/person.dart:15:12
age >= 0
is not true
// 執(zhí)行成功
void main() {
Person p = Person('aaa', 20, 180);
}
類方法和對象操作符
類方法
與靜態(tài)屬性
的使用
// 案例一
<!-- static_class.dart文件 -->
class StaticClass {
// 靜態(tài)屬性
static int count = 1;
// 靜態(tài)方法
static int sum(int a) {
return a + count;
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_oop/static_class.dart';
void main() {
// 直接使用類名訪問
StaticClass.count = 10;
print(StaticClass.sum(20));
}
// 打印內(nèi)容
30
靜態(tài)方法
中不能使用對象屬性
威创;靜態(tài)方法是通過類調(diào)用的,在類調(diào)用方法之前隐岛,可能還沒有實(shí)例化對象,所以實(shí)例對象屬性不能訪問剪菱。
// 案例二
class StaticClass {
// 靜態(tài)屬性
static int count = 1;
int currentCount = 0;
// 靜態(tài)方法
static int sum(int a) {
return a + count + this.currentCount;
}
}
// 運(yùn)行報(bào)錯(cuò)
lib/static_class.dart:8:24: Error: Expected identifier, but got 'this'.
return a + count + this.currentCount;
^^^^
實(shí)例方法
中可以使用靜態(tài)屬性
旗们;實(shí)例方法調(diào)用的時(shí)候稠氮,類對象一定加載進(jìn)去了次兆,所以實(shí)例方法可以使用靜態(tài)屬性恃慧。
// 案例三
class StaticClass {
// 靜態(tài)屬性
static int count = 1;
int currentCount = 0;
// 實(shí)例方法
int sum2(int a) {
return a + count + this.currentCount;
}
}
靜態(tài)屬性
在內(nèi)存中只有一份善延,通過案例四
進(jìn)行驗(yàn)證
// 案例四
class StaticClass {
// 靜態(tài)屬性
static int count = 1;
int currentCount = 0;
int sum2(int a) {
return a + count + this.currentCount;
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_oop/static_class.dart';
void main() {
staticDemo();
StaticClass st = StaticClass();
st.currentCount = 1;
print(st.sum2(20));
}
void staticDemo() {
StaticClass st = StaticClass();
st.currentCount = 10;
StaticClass.count = 11;
print(st.sum2(20));
}
// 打印內(nèi)容
41
32
常量屬性
// 案例五:常量屬性
class StaticClass {
// 靜態(tài)屬性
static int count = 1;
// 實(shí)例屬性
int currentCount = 0;
// 常量屬性屋摇,在常量區(qū)只有一份炮温,所以要用static修飾
static const String str = 'aaa';
// 靜態(tài)方法
static int sum(int a) {
return a + count;
}
// 實(shí)例方法
int sum2(int a) {
return a + count + this.currentCount;
}
}
動(dòng)態(tài)對象添加重斑?
防止空對象調(diào)用方法報(bào)錯(cuò)
// 案例六:動(dòng)態(tài)對象添加?防止空對象調(diào)用方法報(bào)錯(cuò)
void main() {
staticDemo();
}
void staticDemo() {
// dynamic 動(dòng)態(tài)對象
var s1;
s1 = StaticClass();
print(s1.sum2(10));
s1 = null;
// 添加?防止空對象調(diào)用方法報(bào)錯(cuò)
print(s1?.sum2(10));
}
// 打印內(nèi)容
11
null
強(qiáng)制類型轉(zhuǎn)換
只在使用的那一行有效,哪里調(diào)用就在哪里強(qiáng)制轉(zhuǎn)換
// 案例七:強(qiáng)制類型轉(zhuǎn)換
void main() {
staticDemo();
}
void staticDemo() {
var s1 = Object();
s1 = StaticClass();
print((s1 as StaticClass).sum2(10)); // 強(qiáng)制類型轉(zhuǎn)換
// 也可以判斷對象類型再調(diào)用方法
// if (s1 is StaticClass) {
// print(s1.sum2(10));
// }
}
// 打印內(nèi)容
11
void staticDemo() {
var s1 = Object();
s1 = StaticClass();
print((s1 as StaticClass).sum2(10));
// s1 = null;
// 添加晤碘?防止空對象調(diào)用方法報(bào)錯(cuò)
print(s1.sum2(10));
}
// 打印內(nèi)容
11
11
void staticDemo() {
var s1 = Object();
s1 = StaticClass();
print((s1 as StaticClass).sum2(10));
s1 = null;
}
// 運(yùn)行報(bào)錯(cuò)愧哟,已經(jīng)是Object對象就不能被賦值為null
lib/main.dart:12:8: Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
- 'Object' is from 'dart:core'.
s1 = null;
^
鏈?zhǔn)骄幊趟枷?/code>..語法
void main() {
staticDemo();
}
void staticDemo() {
var s1 = Object();
s1 = StaticClass();
// 判斷對象類型再調(diào)用方法
if (s1 is StaticClass) {
print(s1.sum2(10));
print(s1..currentCount = 15..sum2(20));
// s1..currentCount = 15解析
// 第一步:s1.currentCount = 15;
// 第二步:執(zhí)行完第一步之后,返回對象本身
// 返回對象哼蛆,在調(diào)用sum2方法
// 執(zhí)行完sum2方法之后蕊梧,再次返回對象本身,最終打印出對象
}
}
// 打印內(nèi)容
11
Instance of 'StaticClass'
Dart的繼承
// person.dart文件
// 父類Person
class Person {
String? name;
int? age;
int? _height;
// 計(jì)算屬性
bool get isFree => _height! < 110;
run() {
print('Person run.....');
}
}
// main.dart文件
import 'package:flutter/material.dart';
import 'package:flutter_oop/person.dart';
void main() {
extendsDemo();
}
void extendsDemo() {
Student st = Student();
st.run();
st.study();
st.name = 'aaa';
st.age = 18;
print(st.isFree);
}
/*
* Dart中的繼承
* 使用extends繼承一個(gè)類
* 子類會(huì)繼承除了構(gòu)造方法以外的屬性和方法
* Dart是單繼承的
* */
class Student extends Person {
study() {
print('認(rèn)真學(xué)習(xí)!');
}
// @override就是重寫父類的標(biāo)識(shí)腮介,也可以刪掉該標(biāo)識(shí)(不推薦)
@override
// TODO: implement isFree
// 重寫父類計(jì)算屬性
bool get isFree => age! < 18;
}
// 打印內(nèi)容
Person run.....
認(rèn)真學(xué)習(xí)!
false
用父類Person
指向st
肥矢,并重寫父類run
方法
import 'package:flutter/material.dart';
import 'package:flutter_oop/person.dart';
void main() {
extendsDemo();
}
void extendsDemo() {
// 用父類Person指向st,這就是多態(tài)
Person st = Student();
st.run();
if (st is Student) {
st.study();
st.name = 'aaa';
st.age = 17;
print(st.isFree);
}
}
class Student extends Person {
study() {
print('認(rèn)真學(xué)習(xí)!');
}
// 寫在study方法下面叠洗,輸入run重寫父類方法會(huì)有提示
@override
run() {
// TODO: implement run
print('Student Run.....');
}
// @override就是重寫父類的標(biāo)識(shí)
@override
// TODO: implement isFree
// 重寫父類計(jì)算屬性
bool get isFree => age! < 18;
}
// 打印內(nèi)容
Student Run.....
認(rèn)真學(xué)習(xí)!
true
// Dart中所有的類都繼承Object甘改,Person繼承自O(shè)bject,只是繼承于Object的類可以省略extends Object
class Person extends Object
Object
類中有一個(gè)方法toString
灭抑,類似于OC中的description
描述
void extendsDemo() {
Person st = Student();
st.run();
if (st is Student) {
st.study();
st.name = 'aaa';
st.age = 17;
print(st.isFree);
print(st);
}
}
// 打印內(nèi)容
Student Run.....
認(rèn)真學(xué)習(xí)!
true
Instance of 'Student'
// Student類重寫toString方法
class Student extends Person {
study() {
print('認(rèn)真學(xué)習(xí)!');
}
@override
run() {
// TODO: implement run
print('Student Run.....');
}
// @override就是重寫父類的標(biāo)識(shí)
@override
// TODO: implement isFree
// 重寫父類計(jì)算屬性
bool get isFree => age! < 18;
@override
String toString() {
// TODO: implement toString
return 'Student extends Person';
}
}
// 再次運(yùn)行extendsDemo方法查看打印十艾,變成了toString描述
Student Run.....
認(rèn)真學(xué)習(xí)!
true
Student extends Person
子類
會(huì)自動(dòng)繼承父類的默認(rèn)構(gòu)造方法
// person.dart文件
class Person extends Object {
Person() {
print('Person 構(gòu)造!');
}
String? name;
int? age;
int? _height;
// 計(jì)算屬性
bool get isFree => _height! < 110;
run() {
print('Person run.....');
}
}
// main.dart文件
void extendsDemo() {
Person st = Student();
st.run();
if (st is Student) {
st.study();
st.name = 'aaa';
st.age = 17;
print(st.isFree);
print(st);
}
}
// 打印內(nèi)容腾节,說明子類會(huì)自動(dòng)繼承父類的默認(rèn)構(gòu)造方法
Person 構(gòu)造忘嫉!
Student Run.....
認(rèn)真學(xué)習(xí)!
true
Student extends Person
自定義Person
的構(gòu)造函數(shù)
// person.dart文件
class Person extends Object {
Person(this.age);
Person.init();
Person.withName(this.name);
String? name;
int? age;
int? _height;
// 計(jì)算屬性
bool get isFree => _height! < 110;
run() {
print('Person run.....');
}
}
// main.dart文件中的Student類
class Student extends Person {
// 初始化列表主要是用來給final賦值
final String subName;
// 把subName的值賦上去荤牍,注意!! 初始化列表必須放在super前面,否則報(bào)錯(cuò)
Student.withName(String? name) : subName = name!, super.withName(name);
// 父類Person的三個(gè)構(gòu)造方法必須實(shí)現(xiàn)一個(gè)庆冕,否則報(bào)錯(cuò)
// Student.withName(String? name) : super.withName(name);
// Student.init() : super.init();
// Student(int? age) : super(age);
// 父類的三個(gè)構(gòu)造方法必須顯性實(shí)現(xiàn)一個(gè)康吵,其實(shí)主要是實(shí)現(xiàn) super方法;下面是Strudent的一個(gè)無參構(gòu)造方法访递,只要繼承 :super即可
// 這里的 : 有點(diǎn)類似初始化列表
// subName賦個(gè)默認(rèn)值aaa
Student() : subName = 'aaa', super.init();
study() {
print('認(rèn)真學(xué)習(xí)!');
}
// 寫在study方法下面晦嵌,輸入run重寫父類方法會(huì)有提示
@override
run() {
// TODO: implement run
print('Student Run.....');
}
// @override就是重寫父類的標(biāo)識(shí)
@override
// TODO: implement isFree
// 重寫父類計(jì)算屬性
bool get isFree => age! < 18;
@override
String toString() {
// TODO: implement toString
return 'Student extends Person';
}
}
Dart的抽象類和接口
抽象類
類似于Swift
中的面向協(xié)議開發(fā)
// 案例一
// main.dart文件
import 'package:flutter/material.dart';
void main() {
abstractDemo();
}
/*
* 抽象類
* 不能被實(shí)例化的類,使用abstract修飾
* */
void abstractDemo() {
AbstractClass as = SubClass();
as.sum(10, 20);
}
abstract class AbstractClass {
// 這就是抽象方法
int sum(int a, int b);
}
// 子類要想繼承抽象類拷姿,必須實(shí)現(xiàn)抽象類中的方法
class SubClass extends AbstractClass {
@override
int sum(int a, int b) {
print('a + b = ${a+b}');
return a + b;
}
}
// 打印內(nèi)容
a + b = 30
使用implements
實(shí)現(xiàn)抽象類中的多繼承
import 'package:flutter/material.dart';
void main() {
abstractDemo();
}
/*
* 抽象類
* 不能被實(shí)例化的類惭载,使用abstract修飾
* */
void abstractDemo() {
SubClass as = SubClass();
as.sum(10, 20);
as.sum1(20, 30);
}
abstract class AbstractClass {
int sum(int a, int b);
}
abstract class AbstractClass1 {
int sum1(int a, int b);
}
abstract class AbstractClass2 {
int sum2(int a, int b);
}
class a {
var name;
run() {
print('haha');
}
}
// 使用implements實(shí)現(xiàn) 抽象類的多繼承,implements類似于接口
class SubClass implements AbstractClass, AbstractClass1, AbstractClass2, a {
@override
int sum(int a, int b) {
print('subClass..sum');
return 0;
}
@override
int sum1(int a, int b) {
print('subClass..sum1');
return 0;
}
@override
int sum2(int a, int b) {
print('subClass..sum2');
return 0;
}
@override
var name;
@override
run() {
// TODO: implement run
throw UnimplementedError();
}
}
// 打印內(nèi)容
subClass..sum
subClass..sum1
注意!! 雖然使用implements
也可以實(shí)現(xiàn)普通類的屬性與方法
响巢,但是不推薦
這樣使用棕兼。
Mixins混入
Mixins混入
其實(shí)就是多繼承。
// 案例一
import 'package:flutter/material.dart';
void main() {
mixinDemo();
}
void mixinDemo() {
D d = D();
d.a();
d.b();
d.c();
}
class A{
a() => print('a.....');
}
class B{
b() => print('b.....');
}
class C{
c() => print('c.....');
}
// D繼承于A抵乓, B/C就是D的混入類
class D extends A with B, C {}
// 打印內(nèi)容
a.....
b.....
c.....
// 案例二:A/B/C 三個(gè)類中的方法全部命名為a
import 'package:flutter/material.dart';
void main() {
mixinDemo();
}
void mixinDemo() {
D d = D();
d.a();
}
class A{
a() => print('a.....');
}
class B{
a() => print('b.....');
}
class C{
a() => print('c.....');
}
// D繼承于A伴挚, B/C就是D的混入類
class D extends A with B, C {}
// 打印內(nèi)容,因?yàn)镃類是最后一個(gè)灾炭,會(huì)覆蓋掉前面的方法
c.....
作為混入類不能實(shí)現(xiàn)構(gòu)造方法
// 案例三
class C{
// 構(gòu)造方法
C();
a() => print('c.....');
}
// D繼承于A茎芋, B/C就是D的混入類
class D extends A with B, C {}
lib/main.dart:26:7: Error: Can't use 'C' as a mixin because it has constructors.
class D extends A with B, C {}
^
lib/main.dart:21:3: Context: This constructor prevents using 'C' as a mixin.
C();
^
作為混入類,最好不要繼承其他類
要繼承Object
類蜈出,不能繼承實(shí)現(xiàn)了帶參構(gòu)造方法
的類田弥。
class TestClass {
var name;
TestClass(this.name);
}
class C extends TestClass {
a() => print('c.....');
}
// D繼承于A, B/C就是D的混入類
class D extends A with B, C {}
// 運(yùn)行報(bào)錯(cuò)
/*
lib/main.dart:30:7: Error: The non-abstract class 'D' is missing implementations for these members:
- TestClass.name
Try to either
- provide an implementation,
- inherit an implementation from a superclass or mixin,
- mark the class as abstract, or
- provide a 'noSuchMethod' implementation.
class D extends A with B, C {}
^
lib/main.dart:21:7: Context: 'TestClass.name' is defined here.
var name;
^^^^
lib/main.dart:25:7: Error: The superclass, 'TestClass', has no unnamed constructor that takes no arguments.
class C extends TestClass {
^
Unhandled exception:
NoSuchMethodError: The getter 'fileOffset' was called on null.
Receiver: null */
如果D
類中沒有自己的成員屬性
和方法
铡原,就可以這樣寫
// D繼承于A偷厦, B/C就是D的混入類
// class D extends A with B, C {}
// 如果D類中沒有自己 的成員屬性 和方法,就可以這樣寫
class D = A with B, C;
重載操作符operator
燕刻,通過對象屬性
比較兩個(gè)對象的大小
import 'package:flutter/material.dart';
void main() {
operatorDemo();
}
// 操作符
void operatorDemo() {
OperatorClass op1 = OperatorClass(18);
OperatorClass op2 = OperatorClass(20);
print(op1 > op2);
}
class OperatorClass {
int age;
OperatorClass(this.age);
// 重載操作符operator只泼,通過對象屬性比較兩個(gè)對象的大小
bool operator >(OperatorClass other) => this.age > other.age;
}
// 打印內(nèi)容
false