美文网首页FlutterDart
Dart 面向对象 上(二)

Dart 面向对象 上(二)

作者: 向日花开 | 来源:发表于2020-02-12 21:34 被阅读0次

Dart 也是面向对象的语言,同样有着封装、继承、多态的特性。

类的定义

同 Java 一样使用 class 关键字申明一个类,final 修饰的属性,不能被外部重新赋值,只可读,不可写。

//类的定义, class 作为关键字声明
class Person {
  //共有变量
  String name;

  //私有变量
  int _age;

  //final修饰的属性,不能被外部重新赋值,只可读,不可写
  final String phone = '12345678901';

  //类方法
  String show() {
    String msg = "name:${this.name}\tage:${this._age}\tphone:${this.phone}";
    print(msg);
    return msg;
  }
}

类的权限

Dart 类中默认的权限都是公开的,在变量或者方法名前面加下划线"_”的前缀即为私有变量或方法。

  //私有变量
  int _age;
  //私有方法
  void _info(){
    String msg = "name:${this.name}\tage:${this._age}\tphone:${this.phone}";
    print(msg);
  }

类的实例化

Java 中类的实例化需要用到 new 关键字,dart 实例化也一样,或者直接省略 new 关键字,获得对象 。

    Person person = new Person();
    Person person1 = Person();

    person.name = "person";
    person1.name = "person1";

    person.show();
    person1.show();

Getter 和 Setter 方法

对于类的私有变量,我们不可以直接访问,赋值。我们可以通过 get 和 set 方法来获取和赋值。

  //getter  setter 方法

  //get 获取age
  int get age => _age;

  //set 设置age
  set age(int value) {
    _age = value;
  }

构造方法

常见的有参无参构造方法
//动物类定义
class Animal {
  String name;

  int age;

  //1.默认的无参构造函数
  //Animal() {}


  //2.Dart语法糖有参构造方法,因为Dart 不能重载,所以默认的注释
  Animal(this.name,this.age);

  //类方法
  void show() {
    String msg = "name:${this.name}\tage:${this.age}";
    print(msg);
  }
}


void main(){
  Animal animal1 = new Animal();
  animal1.name = "猫咪";
  animal1.age = 1;
  animal1.show();

  Animal animal2 =new Animal("Dog", 2);
  animal2.show();
}

命名构造方法

定义: 类名.方法名(),和一些自己需要赋值的参数。

作用:可以灵活的根据需要定义多个自己需要的构造函数。

 //3.命名构造方法
  Animal.withNew(String name,int age){
    this.name=name;
    this.age=age;
  }

  Animal animal3 = Animal.withNew("猪", 1);
  animal3.show();
常量构造方法

当类的属性设置一次之后,就不会再设置了,那么这个类就可以声明为常量类,常量类的属性使用 final 修饰,而构造方法使用 const 修饰。

//4.常量构造方法
//如果需要将对象作为常量,就需要将构造方法声明为常量构造方法
//使用常量构造方法的对象,属性和构造方法都为常量,属性使用final修饰,构造方法使用const修饰
//常量型对象运行时更快,如果对象的值设置一次后就不会改变,可以使用这种方式
class Animal1 {
  final String name;

  final int age;

  const Animal1(this.name, this.age);

  //类方法
  void show() {
    String msg = "name:${this.name}\tage:${this.age}";
    print(msg);
  }
}

  const animal4 = Animal1("驴", 10);
  animal4.show();

工厂构造方法
///5.工厂构造方法演示
class Logger {
  static Logger _cache;

//  工厂构造方法:
//  不仅仅是构造方法,更是一种模式
//  有时候为了返回一个之前已经创建的缓存对象,原始的构造方法已经不能满足要求
//  那么可以使用工厂模式来定义构造方法
  factory Logger() {
    if (_cache == null) {
      _cache = Logger._internal();
    }
    return _cache;
  }

  Logger._internal();

  void log(String msg) {
    print(msg);
  }
}
参数列表构造方法

初始化列表的格式,在构造方法名后加 :属性=值,不同的变量用逗号分隔。

// 6.参数列表构造方法
class Animal2 {
  String name;

  int age;

  final String id;

  //
  Animal2(String name, this.age)
      : name = name,
        id = "12";
}

静态成员

  • 静态方法,只能访问静态成员。
  • 实例方法,既能访问静态成员,也可以访问实例成员

对象操作符

安全对象操作符(?)

判断一个对象为空不用在写 if 判断,直接如下:

Person person;
//?.对象操作符,在对象为null时,不会进行调用
person?.show();

as 操作符

将对象强制转为某一类型,如果类型强转出错则会抛出异常。

//没有推断出Person,类型为dynamic
var person2;
//因为类型为dynamic,可以赋值任意类型
person2 = "";
//as操作符,强转类型,这里是String类型,强转为Person类型会抛出异常。
(person2 as Person).show();

is 操作符

判断对象是否为某个类型的实例。是返回 true,不是则返回 false,dart 通过 is 判断后不需用 as 转型即可使用。

if (person2 is Person) {
    print('object is Person');
}

if (person2 is Person) {
    //经过了is操作符判断,就不用as操作符再转换再操作
    person2.show();
}
..级联操作符

对象后面.. ,即可实现对象的链式调用。

//级联操作符,每次操作后都返回自身,方便链式调用
var person3 = new Person();
person3
..name = 'hello'
..age = 20
..show();

最后

贴一张自己学习Flutter的公众号,感兴趣的小伙伴可以一起学习哦。。。

相关文章

  • Dart 面向对象 上(二)

    Dart 也是面向对象的语言,同样有着封装、继承、多态的特性。 类 类的定义 同 Java 一样使用 class ...

  • Dart语法(下)

    前文链接: Dart简介 Dart语法(上) 内容: 函数(方法)函数定义及各类函数;函数参数;闭包 面向对象定义...

  • Dart面向对象编程二

    继承 使用关键字extends继承一个类 子类会继承父类可见的属性和方法,不会继承构造方法 子类能够复写父类的方法...

  • Dart面向对象编程(二)

    本篇内容主要是对面向对象知识点扩展:主要包括以下内容:继承,抽象类,接口,Mixins。面向对象基础相关知识点,可...

  • Dart系列-面向对象(二)

    周末学习了一下Dart语言,按照慕课网Flutter开发第一步-Dart编程语言入门[https://www.im...

  • 2019-09-20: 九: Flutter之Dart第六节(类

    九: Flutter之Dart第六节(类和对象)? Dart 是一个面向对象的语言、面向对象中非常重要的概念就是类...

  • Flutter(六) Dart语言基础-面向对象特性

    Dart是一个面向对象的语言,面向对象中非常重要的概念就是类,类产生了对象。今天,我们就具体来学习Dart 中重要...

  • Dart语法 -- [06 - 类和对象]

    Dart是一个面向对象的语言,面向对象中非常重要的概念就是类,类产生了对象。 1.1. 类的定义 在Dart中,定...

  • 基础学习

    1.第一个世界级程序 Dart面向对象编程 Dart是一种面向对象的语言。面向对象是一种遵循真实世界建模的软件开发...

  • Dart语言(三)Functions(方法)

    Dart语言(三)Functions(方法) Dart是一个真正的面向对象的语言,方法本身也是个对象,这个对象类型...

网友评论

    本文标题:Dart 面向对象 上(二)

    本文链接:https://www.haomeiwen.com/subject/alfcfhtx.html