flutter 泛型_Dart4Flutter – 03 – 类和泛型

下面是创建一个类和创建类的实例。

main(List args) {

Dog d = new Dog();

}

class Dog{

}

复制代码

现在我们给类添加实例变量和构造函数,添加age和name属性给Dog类。

main(List args) {

Dog d = new Dog('Duffy', 2);

print(d.name);

}

class Dog{

String name;

int age;

Dog(String name, Stirng age) {

this.name = name;

this.age = age;

}

}

复制代码

Dart提供了更加简单直接的方式定义构造函数,如下:

main(List args) {

Dog d = new Dog('Duffy', 2);

print(d.name);

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

}

复制代码

如上所示,我们一行就定义了构造函数,其中第一个参数复制给name属性,第二个参数赋值给age属性。

命名构造函数

dart提供了另一种定义函数的方式为:命名构造函数。

main(List args) {

Dog d = new Dog.newBorn();

print(d.name);

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

}

复制代码

如上所示,给构造函数提供了名称,这样做使得不同的构造函数变的更加清晰。

Inheritance 继承

你可以使用extends关键字继承其他的类。

main(List args) {

Pug p = new Pug('Duffy', 5);

print(p.name);

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

}

class Pug extends Dog{

Pug(String name, int age): super(name, age);

}

复制代码

Pug 类继承Dog类,通过super关键字调用Dog类的构造函数。

你也可以通过this关键字,在冒号之后调用同一个类中的其他构造函数。

main(List args) {

Pug p = new Pug.small('Duffy');

print(p.name);

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

}

class Pug extends Dog{

Pug(String name, int age): super(name, age);

Pug.small(Stirng name): this(name, 1);

Pug.large(Stirng name): this(name, 3);

}

复制代码

如上所示,我们定义了两个命名构造函数,他们只需要dog的名字,然后调用Pug的默认构造函数。

方法

在类中定义方法和独立定义方法是一样的。

main(List args) {

Dog d = new Dog('Duffy', 10);

d.bark();

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

bark() {

print('Bow Wow');

}

}

复制代码

重写方法一样简单。

main(List args) {

Pug p = new Pug.small('Duffy');

p.bark();

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

bark() {

print('Bow Wow');

}

}

class Pug extends Dog{

Pug(String name, int age): super(name, age);

Pug.small(Stirng name): this(name, 1);

Pug.large(Stirng name): this(name, 3);

@override

bark() {

print('Meow!');

}

}

复制代码

Getter and Setters

默认,获取类中的任何变量都可以直接引用变量的名字。例如,dog.name,可以直接获取或者赋值name的值。但是有时候我们希望自定义属性的getter和setter方法,可以使用get和set关键字自定义getter和setter方法。

main(List args) {

Dog d = new Dog('Duffy', 5);

d.respectedName = 'Mr.Duffy';

print(d.respectedName);

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

String get respectedName {

return 'Mr.$name';

}

set respectedName(String newName) {

name = newName;

}

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

bark() {

print('Bow Wow');

}

}

复制代码

现在,你可能在想,name属性是可以访问而且可以被随意修改。来让我处理一下,使name属性私有化。

访问控制

默认类中的所有属性和方法是public的。在dart中,可以在属性和方法名前添加“_”使私有化。现在让我们使name属性私有化。

main(List args) {

Dog d = new Dog('Duffy', 5);

print(d.name); //This will throw error

}

class Dog{

String _name;

int age;

Dog(this.name, this.age);

String get respectedName {

return 'Mr.$name';

}

set respectedName(String newName) {

name = newName;

}

Dog.newBorn() {

name = 'Doggy';

age = 0;

}

bark() {

print('Bow Wow');

}

_hiddenMethod() {

print('I can only be called internally!');

}

}

复制代码

抽象类和方法

你可以通过abstract关键字声明抽象类

abstract class AbstractDog{

void bark();

void _hiddenMethod();

}

复制代码

你只需要在类声明前添加abstract关键字,方法不需要。方法只需要签名,不需要实现。

静态方法

如果想让方法或者属性静态化,只需要在声明前添加static关键字。

main(List args) {

Dog.bark();

}

class Dog{

String name;

int age;

Dog(this.name, this.age);

static bark() {

print('Bow Wow');

}

}

复制代码

枚举

dart 支持枚举,用法和java一样。

main(List args) {

Dog d = new Dog('Duffy', 12, CurrentState.sleeping);

print(d.state == CurrentState.sleeping); //Prints 'true'

}

enum CurrentState {

sleeping,

barking,

eating,

walking

}

class Dog{

String name;

int age;

CurrentState state;

Dog(this.name, this.age, this.state);

static bark() {

print('Bow Wow');

}

}

复制代码

泛型

dart全面支持泛型。假设你想在你定义的类中,想持有任意类型的数据。如下是怎样使用泛型定义这样的类。

main(List args) {

DataHolder dataHolder = new DataHolder('Some data');

print(dataHolder.getData());

dataHolder.setData('New Data');

print(dataHolder.getData());

}

class DataHolder{

T data;

DataHolder(this.data);

getData() {

return data;

}

setData(data) {

this.data = data;

}

}

复制代码

结束

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值