java中dart类详细讲解

 更新时间:2021年2月10日 00:00  点击:2207

dart 是一个面向对象的语言;面向对象有

  1. 继承
  2. 封装
  3. 多态

dart的所有东西都是对象,所有的对象都是继承与object类

一个类通常是由属性和方法组成的

在dart中如果你要自定义一个类的话,将这个类放在main函数外面

类名使用大驼峰方法名使用小驼峰

1.定义这个类的属性和方法

//定义一个类的属性和方法
class Person {
 String name = '张三';
 int age = 19;
 void getInfo() {
  // print('我叫$name,今年$age');第一种
  //推荐使用这样的写,通过this去访问
  print("${this.name}====${this.age}");
 }
}

//使用类中的属性和方法
void main() {
 // 调用Perso这个类 首先需要实例化这个类
 // Person p = new Person(); // 等价 var p=new Person
 var p = new Person();
 print(p.age);
 p.getInfo();
}

2 .改变类中的属性和方法

class Person {
 String name = '张三';
 int age = 19;
 void getInfo() {
  //推荐使用这样的写法
  print("${this.name}====${this.age}");
 }
 //限制类型,更改类中的属性和方法
 SetUserinfo(int age) {
  this.age = age;
 }
}

void main() {
 // 调用Perso这个类 首先需要实例化这个类
 Person p = new Person(); // 等价 var p=new Person
 print(p.age);//19
 p.getInfo();//张三====19
 p.SetUserinfo(100);
 p.getInfo();//张三====100
}

3.默认构造函数

class Person {
  //这是一个默认构造函数
 Person() {
  print('默认构造函数里面的内容,该方法在实例化的时候会自动出发哈');
 }
}

void main() {
 // 实例化的时候,会自动触发默认构造函数
 Person p = new Person(); // 等价 var p=new Person
}

4. 动态传递,类多次实例化,打印不同的值

class Person {
 String name;
 int age;
 Person(String name, int age) {
  this.name = name;
  this.age = age;
 }
 void getuserInfo() {
  print(this.name);
  print(this.age);
 }
}

void main() {
 // 实例化的时候,会自动触发
 Person p = new Person('张三', 10); // 等价 var p=new Person
 p.getuserInfo();

 //这个类可以实例化多次的哈
 Person v = new Person('张三1', 100); // 等价 var p=new Person
 v.getuserInfo();
}

5.默认构造函数简写

class Person {
 String name;
 int age;
 
 // Person(String name, int age) {
 //  this.name = name;
 //  this.age = age;
 // }
 //上面注释的代码等价于 Person(this.name, this.age);
 Person(this.name, this.age);
 void getuserInfo() {
  print(this.name);
  print(this.age);
 }
}

6.命名构造函数,命名构造函数是可以写多个的;但是默认构造函数只能写一个

class Person {
 //我是默认的构造函数
 Person() {
  print('我是默认的构造函数');
 }
 // 命名构造函数
 Person.mynow() {
  print('我是命名构造函数');
 }
}

void main() {
 // 实例化的时候,会默认构造自动触发
 Person p = new Person(); // 等价 var p=new Person
 Person v = new Person.mynow(); // 触发命名构造函数
}

7.类抽离出去,单独放一个文件夹中

在项目的根目录创建一个文件夹 lib
在lib文件夹中创建一个文件 xxx.dart内容如下

class Person {
 //我是默认的构造函数
 Person() {
  print('我是默认的构造函数');
 }
 // 命名构造函数
 Person.mynow() {
  print('我是命名构造函数');
 }
}


在需要的某个文件中引入
import 'lib/xxx.dart';
void main() {
 // 实例化的时候,会默认构造自动触发
 Person p = new Person(); // 等价 var p=new Person
 Person v = new Person.mynow(); // 触发命名构造函数
}

8.dart修饰符

dart和其他面向对象的语言不一样。没有向public private 这样的访问修饰符

但是我们可以使用_把一个属性或者方法定义成私有的,(就是在变量或者方法的前面添加_;并且要单独把他抽离出去变成一个文件 放在lib目录下,这样外面就不能够访问了);

但是个人觉得这种没有实质的意义 如果要访问这个私有的方法,那么在类种添加一个共有的方法;去访问这个私有的方法;访问在return回去; 就可以访问这个私有的方法了 私有方法,只有在当前类中访问哈 在lib目录下的animal.dart文件;

内容如下

class Animal {
 String _name = 'dog';//这是私有的方法,只当前这个类可以访问;其他类是不能够访问的哈~;
 // 如果非要访问这个类,可以通过共有方法来访问
 
 // 通过公共方法来访问这个类;间接访问
 getName(){
  print(this._name);
 }

 int age = 19;
 void getInfo() {
  //推荐使用这样的写法
  print("${this._name}====${this.age}");
 }

 //限制类型,更改类中的属性和方法
 SetUserinfo(int age) {
  this.age = age;
 }
}

9. 计算矩形的面积将他改为get方法

class Rect {
 num width;
 num height;
 Rect(this.width, this.height);
 getUserINfo() {
  return (this.width * this.height);
 }
}

void main() {
 // 实例化的时候,会默认构造自动触发
 Rect p = new Rect(10, 4); // 等价 var p=new Person
 print(p.getUserINfo());
}

将上面的代码改为get方法

class Rect {
 num width;
 num height;
 Rect(this.width, this.height);
 // getUserINfo() {
 //  return (this.width * this.height);
 // }

 // 将上面的代码该为get
 get getUserINfo {
  return (this.width * this.height);
 }
}

void main() {
 // 实例化的时候,会默认构造自动触发
 Rect p = new Rect(10, 4);
 // print(p.getUserINfo());
 // 将上面的代码改为get方法的调用
 print(p.getUserINfo);//调用的时候直接通过访问属性的方式访问方法
}

10.dart 中的set 方法

class Rect {
 num width;
 num height;
 Rect(this.width, this.height);
 // 设置值的时候。我们使用了set方法
 set areaHeight(value) {
  this.height = value;
 }
 get area {
  return this.height;
 }
}
void main() {
 // 实例化的时候,会默认构造自动触发
 Rect p = new Rect(10, 4);
 p.areaHeight = 6; //当一个类的内部使用了set方法的时候。我们直接使用赋值;
 print(p.area); //内部使用了get 我们这直接通过属性获取值
}

11.在实例化之前,给类内部初始化数值

class Rect {
 num width;
 num height;
 // 在实例化之前,给类内部初始化数值
 Rect()
   : height = 2,
    width = 10 {}
 get area {
  return this.height * this.width;
 }
}

void main() {
 // 实例化的时候,会默认构造自动触发
 Rect p = new Rect();
 print(p.area); //内部使用了get 我们这直接通过属性获取值
}

到此这篇关于dart类详细讲解的文章就介绍到这了,更多相关dart类讲解内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Java实现经典游戏复杂迷宫

    这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • java 运行报错has been compiled by a more recent version of the Java Runtime

    java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 浅谈Java与C#的一些细微差别

    说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)

    这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15
  • Java开发实现人机猜拳游戏

    这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03