Dart与Java语法的一些不同之处

构造函数

Dart中的构造函数可以省略方法体

java

class Student{
	public String name;
	public int age;
	Student(String name,int age){
		this.name = name;
		this.age = age;
	}
}

Dart

class Student{
	String name;
	int age;
	Student(this.name,this.age);
}
Dart中的命名构造函数
class Student{
	String name = "";
	
	//命名构造函数 (可以设置多个,名称自定义,参数自定义)
	Studen.build(String name){
		this.name = name;
	}
}
Dart中可以在实例化之前为变量设置属性值

先执行属性赋值,再执行构造方法

class Student {
  String name = "";
  int age = 2;

 //实例化之前为变量设置属性值
  Student():name = "悟空",age = 20;
}

自定义类型

  • Dart中可以为函数定义类型, 在声明函数类型参数时,只需声明此类型,便可规定为传递此函数
定义
将 返回值为 Widget 的一个函数,定义为 myType类型
typedef myType = Widget Function(BuildContext context);
使用
//定义了一个getName方法,接收的参数类型为myType,则外部在调用时,需出入一个与声明格式相同的函数
void getName(myType type){

	//回调传入的声明函数,此时的type可以理解为方法名称
	type(context);
}

私有属性/方法

java

通过private关键字

private String name;

private void showInfo(){
}

Dart

直接在 属性/方法 名称前加下划线

String _name;

void _showInfo(){
}

Dart 类中的set和get方法

class Student {

  String name = "";
  int age = 2;
  
  Student(this.name, this.age);
  
  //get方法
  get studentInfo {
    return "学生的信息, 姓名:  $name 年龄: $age";
  }

  //set方法
  set studentName(value) {
    this.name = value;
  }
}
//使用
void main() {
  Student student = new Student("小明", 30);
  print("${student.studentInfo}");

  student.studentName = "小花";
  print("${student.studentInfo}");
}


Dart中的级联操作

如果频繁操作了一个对象,可使用如下调用吗

void main() {
  Student student = new Student();
//级联操作,简化代码
  student..name = "八戒"
  ..age = 900
  ..studentInfo;
}

Dart中的接口

  • dart中没有interface关键字,一般使用抽象类来定义接口 , 同样使用implements关键字来实现
  • 由于抽象类中可以定义属性,所以实现接口后,属性也需要实现.

Dart中的 mixins

mixins类可模拟多继承, 但是在使用时存在一定的局限性

  1. 作为mixins的类智能继承自Object,不能继承其他类
  2. 作为mixins的类不能有构造函数
  3. 一个类可以 mixins 多个 mixins类
  4. mixins不是继承,也不是接口实现, 它可以和继承与接口同时存在
  5. 如果继承和 mixins类中存在同样的方法,则依照顺序,后者覆盖前者
示例如下
class Person{
 String str = "普通类文本";
}

class A {
 String name = "a";
 printA(){
   print("类名 $name");
 }

 void run(){
   print("run A");
 }
}

class B {
 String name = "b";
 printB(){
   print("类名 $name");
 }

 void run(){
   print("run B");
 }
}

/*
* 此处 with后方的A和B便是mixins类,他们不能存在构造方法,不能有继承的父类
* 继承和mixins可同时存在
* */
class C extends Person with A,B{}

void main() {
 C c = new C();
 c.printA();
 
 //由于存在相同的name属性,且B类在后,所以B类的name会覆盖A类的name
 c.printB();
 //同上,B类的run()覆盖了前面的
 c.run();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值