dart中类详细讲解
dart是一门面向对象的语言
dart是一门实用类和单继承的面向对象的语言
在dart中所有的对象都是类的实例。
所有的类都是Object的子类
类都是有属性和方法组成的
定义一个类
在dart中,我们可以通过关键字class来定义类
类名通常首字母是你大写的。采用的是大驼峰的方式。
如果我们定的是函数或者方法。我们首字母是小写的;采用小驼峰的方式
我们刚刚说了:类通常是由属性和方法组成的。下面我们就实现一个类
实现一个简单的类
class PersonIno {
// 类中的属性
String name = '林漾';
int age = 30;
// 类中的方法
likes() {
print('喜欢逛街');
}
// 访问类中的属性
info() {
// 直接访问属性
print('我叫 $name,今年$age');
// 通过this的来访问属性
print('我叫 ${this.name},今年${this.age}');
}
}
使用类之前进行实例化
void main() {
//实例化
var p = new PersonIno();
//调用类中的方法
p.info();
print(p.name);
// 我们也可以声明这个p的类型哈;PersonIno类型
PersonIno p1 = new PersonIno();
}
dart中的构造函数
class PersonIno {
// 类中的属性
String name = '林漾';
int age = 30;
// 构造函数的名称和类型相同
PersonIno() {
print('我是构造函数,在实例化的时候就会被触发');
}
// 类中的方法
likes() {
print('喜欢逛街');
}
// 访问类中的属性
info() {
// 直接访问属性
print('我叫 $name,今年$age');
// 通过this的来访问属性
print('我叫 ${this.name},今年${this.age}');
}
}
使用构造函数初始化值
我们现在的这个PersonIno类;
只能够输出一个人的信息和年龄
如果我们需要输出张三 李四 王五....
很多人的信息怎么办??
这个时候我们就可以使用构造函数哈!
void main() {
//实例化
var p = new PersonIno('李四', 20);
p.info();
// 类是可以被多次实例化的
var p1 = new PersonIno('王五', 25);
p1.info();
}
class PersonIno {
// 类中的属性
String name;
int age;
// 构造函数的名称和类型相同
PersonIno(String name, int age) {
this.name = name;
this.age = age;
}
// 访问类中的属性
info() {
// 通过this的来访问属性
print('我叫 ${this.name},今年${this.age}');
}
}
简写dart中的构造函数
// 构造函数的简写方式
PersonIno(this.name, this.age);
// 与上面的相同
PersonIno(String name, int age) {
this.name = name;
this.age = age;
}
命名构造函数。
void main() {
//实例化
var p = new PersonIno('李四', 20);
}
class PersonIno {
// 类中的属性
String name;
int age;
// 构造函数的简写方式
PersonIno(this.name, this.age);
PersonIno.myFun() {
print('我是命名的构造函数');
}
}
我们都知道在实例化的时候,会默认触发【构造函数】。
但是并不会去触发【命名构造函数】哈
如何去触发【命名构造函数呢】
//这样就会触发默认的构造函数了
var p = new PersonIno.myFun();
一个类中只能有一个构造构造函数。
但是可以有多个构造函数
命名构造函数也可以初始化值
void main() {
//实例化
var p = new PersonIno.myFun('余声声', 22);
p.info();
}
class PersonIno {
// 类中的属性
String name;
int age;
// 构造函数的简写方式
PersonIno(this.name, this.age);
PersonIno.myFun(this.name, this.age);
// 访问类中的属性
info() {
// 通过this的来访问属性
print('我叫 ${this.name},今年${this.age}');
}
}
将类抽离出去
在实际的开发中,我们可能会有很多的类。
这样会文件越来越大。导致维护麻烦
这个时候,我们就需要将类抽离出去
那么,如何将类抽离出去呢??
在项目的根目录下创建一个文件夹lib.
将类放入这个文件夹下哈
文件名【PersonIno】和类名【PersonIno】相同
import 'lib/PersonIno.dart';
void main() {
//实例化
var p = new PersonIno.myFun('余声声', 22);
p.info();
}
私有的方法和属性
dart和其他的面向对象的语言不一样。
dart中没有public private protected这些访问修饰符
但是我们可以使用_把一个属性或者方法定义成为一个私有的。
需要注意的是:
如果你在属性或者方法前面添加"_"在同一个文件送仍然是可以访问的【1】
但是如果是单独抽离出去的文件在属性和方法前面添加“_"就不可以访问【2】
举个例子【1】
void main() {
var p = new PersonInfo('唐三', 18);
print(p._age); //输出18是可以访问的
}
class PersonInfo {
String name;
int _age; //虽然添加了"_"表示私有,但是在同一个文件中仍然可以访问
PersonInfo(this.name, this._age);
}
例子【2】 lib目录下的 PersonInfo 类文件PersonInfo.dart
class PersonIno {
// 类中的属性
String _name;
int age;
// 构造函数的简写方式
PersonIno(this._name, this.age);
// 访问类中的属性
info() {
// 通过this的来访问属性
print('我叫 ${this._name},今年${this.age}');
}
}
这个时候就会出现访问报错
import 'lib/PersonIno.dart';
void main() {
var p = new PersonIno('唐三', 18);
print(p._name);
}
求两个数字的和
void main() {
Sun c = new Sun(10, 20);
print(c.backSum());
}
class Sun {
num a;
num b;
Sun(this.a, this.b);
backSum() {
return this.a + this.b;
}
}
使用getter求两个数字的和
void main() {
Sun c = new Sun(10, 20);
print(c.backSum); //直接访问属性的方式
}
class Sun {
num a;
num b;
Sun(this.a, this.b);
// 使用getter去掉小括号
get backSum{
return this.a + this.b;
}
}
setter方法的使用
void main() {
Sun c = new Sun(10, 20);
c.restateA = 100; //重新设置一个值
print(c.backSum); //直接访问属性的方式 返回120
}
class Sun {
num a;
num b;
Sun(this.a, this.b);
// 使用getter去掉小括号
get backSum {
return this.a + this.b;
}
// setter的使用方法,
set restateA(value) {
this.a = value;
}
}
dart中类详细讲解的更多相关文章
- dart类详细讲解
dart 是一个面向对象的语言;面向对象有 (1)继承 (2)封装 (3)多态 dart的所有东西都是对象,所有的对象都是继承与object类 一个类通常是由属性和方法组成的哈: 在dart中如果你要 ...
- Siki_Unity_2-1_API常用方法和类详细讲解(上)
Unity 2-1 API常用方法和类详细讲解(上) 任务1&2:课程前言.学习方法 && 开发环境.查API文档 API: Application Programming I ...
- 05-- C++ 类的静态成员详细讲解
C++ 类的静态成员详细讲解 在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不 ...
- head标签详细讲解
head标签详细讲解 head位于html网页的头部,后前的标签,并以开始以结束的一html标签. Head标签位置如图: head标签示意图 head包含标签 meta,title,link,bas ...
- 详细讲解nodejs中使用socket的私聊的方式
详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...
- iOS KVC详细讲解
iOS KVC详细讲解 什么是KVC? KVC即NSKeyValueCoding,就是键-值编码的意思.一个非正式的 Protocol,是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取 ...
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
- 详细讲解Android对自己的应用代码进行混淆加密防止反编译
1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...
- 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)
首先,说的是,本人到现在为止,已经玩过. 对于,这样的软件,博友,可以去看我博客的相关博文.在此,不一一赘述! Eclipse *版本 Eclipse *下载 Jd ...
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
随机推荐
- 深入解析 WezTerm 的自定义功能:键绑定和鼠标绑定
WezTerm 是一个高性能的跨平台终端模拟器,它提供了广泛的自定义选项,包括键绑定和鼠标绑定,使得用户可以根据自己的需求优化操作界面.本文将详细介绍几个关键的自定义功能,解释它们的用途,并展示如何配 ...
- (Python基础教程之十五)Python开箱Tuple–太多值无法解压
Python示例,用于unpack元组或序列或可迭代,以便该元组可能长于N个元素,从而导致" 太多的值无法unpack "异常. 1.打开任意长度的元组 Python" ...
- Mybatis【12】-- Mybatis多条件怎么查询?
很多时候,我们需要传入多个参数给sql语句接收,但是如果这些参数整体不是一个对象,那么我们应该怎么做呢?这里有两种解决方案,仅供参考. 1.将多个参数封装成为Map 测试接口,我们传入一个Map,里面 ...
- Input报错“Form elements must have labels: Element has no title attribute Element has no placeholde”
喵~ 项目开发难免会遇到些不解的问题,以下总结的是简化版,重在复现问题,解决问题. 写表单时,如果只是单独写了input元素,发现在后台管理会飘红.感觉很奇怪,明明没有写错语法,为什么会飘红呢? 1. ...
- Element Plus组件v-loading在el-dialog组件上使用无效
前情 公司有经常需要做一些后台管理页面,我们选择了Element Plus,它是基于 Vue 3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个 Vu ...
- VTK 视角的旋转、平移、缩放
在CAD/CAM软件中,都需要旋转.平移和缩放视角,来观察操作图形.由于VTK定义的交互的类型不是很适用,所有通过定义一套自己的交互方式. 在下面代码中,鼠标左键平移,滚轮缩放,右键旋转. 先定义一个 ...
- R数据分析:PLS结构方程模型介绍,论文报告方法和实际操作
前面给大家写的关于结构方程模型的文章都是基于变量的方差协方差矩阵来探讨变量间关系的,叫做covariance-based SEM,今天给大家介绍一下另外一个类型的SEM,叫做偏最小二乘结构方差模型.一 ...
- 【Javaweb】JSP标准标签库
目录 JSTL 1.什么是JSTL 2.版本 3.标签函数库 4.优点 JSTL基本概念 标签(Tag) 标签库(Tag library) 标签库描述文件(Tag Library Descriptor ...
- 执行docker ps时提示"dial unix /var/run/docker.sock: connect: permission denied"
0. 创建docker用户组 sudo groupadd docker 1. 将当前用户加入docker组 # sudo gpasswd -a $USER docker $ sudo usermod ...
- Win11右键显示更多选项设置教程
Win11如何设置右键显示更多选项?如果你觉得每次右键菜单,都是需要点击"显示更多选项"十分麻烦,那么可以通过设置,让其直接显示出现.那么应该如何操作呢?下面小编就为大家带来具体的 ...