1 dart中的抽象类,不能直接实例化,只能被子类继承,然后子类进行实例化.
    2 dart中也有和java中类似的接口的概念,但是还是有区别的
    首先dart接口没有interface关键字定义接口,而是普通类或者抽象类都可以作为接口被实现.同样适用implements关键字进行实现.
    如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍,因为抽象类可以定义抽象方法,普工类不可以,所以一般如果要实现像java接口那种方式,一般会使用抽象类.
    3 extends抽象类和implements的区别
    3.1 如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话我们就用extend集成抽象类
    3.2 如果只是把抽象类仿作标准的话我们就用implements实现抽象类
    4 dart中不能实现多继承
    例如:

    1. class a extends A ,B

    这种写法是错误的.
    但是如果我们要实现类似于多继承的功能应该怎么做呢.
    mixins,这个功能很好的为我们提供了办法,mixins的意思是混入,就是在类中混入其他功能.
    4.1 作为mixins的类只能继承自Object,不能继承其他类,
    4.2 作为mixins的类不能有构造函数
    4.3 一个类可以mixins多个mixins类
    4.4 mixins绝对不是继承,也不是接口,而是一种全新的特性

    1. class a (){
    2. }
    3. class b (){
    4. }
    5. class c with a,b(){
    6. }

    5 dart中第三方库的引用,这里主要记录系统库的引用.
    import “dart:XX”,这个XX就是库的名称,系统库有dart:math,dart:io等等库.
    当不同dart文件,有相同的类名的时候,我们可以使用关键字as,来重命名.
    例如,Person1.dart Person2.dart.都有相同的类Person
    那么可以引用的时候可以使用import “Person1.dart” as lib 来使用.
    5.1
    dart中如果只需要导入库的一部分,有两种模式,
    模式一: 只导入需要的部分使用关键字show,
    模式二: 隐藏不需要的部分,使用关键字hide.
    6 dart 是强类型的语言,一旦一开始被赋值就确定了类型,再次赋值不同类型的值则会报错.

    1. var t;
    2. t = "hi world";
    3. t = 1000;

    7 dynamic和Object
    Object是dart中所有类的基类,类似于oc中的NSObject,所有类型都是Object的子类,所以任何类型的数据都可以赋值给Object声明的对象,dynamic和var 一样都是关键字,声明的变量可以赋值给任意对象,而dynamic和Object相同之处在于,他们声明的变量可以在后期改变赋值类型.

    1. dynamic t;
    2. Object x;
    3. t = "hello";
    4. x = "nihao"
    5. t = 1;
    6. x = 2;

    二者不同的是,dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用Object的属性和方法.否则编译器会报错.

    1. dynamic a;
    2. Object b;
    3. main(){
    4. a = "";
    5. b = "";
    6. printLengths(){
    7. print(a.length);
    8. print(b.length);
    9. }
    10. }

    变量a不错报错,变量b编译器会报错.
    dynamic这个特性和oc中的id很像,
    8 final和const
    如果你不打算改变一个变量,那么使用final或const,二者区别在于const变量是一个编译时变量,final
    是第一次被使用的时候被初始化,被final或者const修饰的变量,变量类型可以省略.

    1. final str = "hello";
    2. //final String str = "hello";可以省略
    3. const str1 = "world";
    4. //const String str1 = "world";可以省略