1 dart中的抽象类,不能直接实例化,只能被子类继承,然后子类进行实例化.
2 dart中也有和java中类似的接口的概念,但是还是有区别的
首先dart接口没有interface关键字定义接口,而是普通类或者抽象类都可以作为接口被实现.同样适用implements关键字进行实现.
如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍,因为抽象类可以定义抽象方法,普工类不可以,所以一般如果要实现像java接口那种方式,一般会使用抽象类.
3 extends抽象类和implements的区别
3.1 如果要复用抽象类里面的方法,并且要用抽象方法约束子类的话我们就用extend集成抽象类
3.2 如果只是把抽象类仿作标准的话我们就用implements实现抽象类
4 dart中不能实现多继承
例如:
class a extends A ,B
这种写法是错误的.
但是如果我们要实现类似于多继承的功能应该怎么做呢.
mixins,这个功能很好的为我们提供了办法,mixins的意思是混入,就是在类中混入其他功能.
4.1 作为mixins的类只能继承自Object,不能继承其他类,
4.2 作为mixins的类不能有构造函数
4.3 一个类可以mixins多个mixins类
4.4 mixins绝对不是继承,也不是接口,而是一种全新的特性
class a (){
}
class b (){
}
class c with a,b(){
}
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 是强类型的语言,一旦一开始被赋值就确定了类型,再次赋值不同类型的值则会报错.
var t;
t = "hi world";
t = 1000;
7 dynamic和Object
Object是dart中所有类的基类,类似于oc中的NSObject,所有类型都是Object的子类,所以任何类型的数据都可以赋值给Object声明的对象,dynamic和var 一样都是关键字,声明的变量可以赋值给任意对象,而dynamic和Object相同之处在于,他们声明的变量可以在后期改变赋值类型.
dynamic t;
Object x;
t = "hello";
x = "nihao"
t = 1;
x = 2;
二者不同的是,dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用Object的属性和方法.否则编译器会报错.
dynamic a;
Object b;
main(){
a = "";
b = "";
printLengths(){
print(a.length);
print(b.length);
}
}
变量a不错报错,变量b编译器会报错.
dynamic这个特性和oc中的id很像,
8 final和const
如果你不打算改变一个变量,那么使用final或const,二者区别在于const变量是一个编译时变量,final
是第一次被使用的时候被初始化,被final或者const修饰的变量,变量类型可以省略.
final str = "hello";
//final String str = "hello";可以省略
const str1 = "world";
//const String str1 = "world";可以省略