java中dart类详细讲解

作者:流年少年 时间:2022-01-23 13:01:13 

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 我们这直接通过属性获取值
}

来源:https://www.cnblogs.com/ishoulgodo/p/14394137.html

标签:java,dart,类
0
投稿

猜你喜欢

  • Idea热加载插件JRebel激活以及使用教程

    2022-03-27 18:16:34
  • formfile文件上传使用示例

    2023-06-23 03:41:58
  • JAVA设计模式之备忘录模式原理与用法详解

    2023-08-24 13:23:37
  • Maven如何打入依赖中指定的部分jar包

    2023-09-22 02:50:33
  • flutter实现发送验证码功能

    2023-07-05 19:03:12
  • Java实现的校验银行卡功能示例

    2022-01-28 19:33:53
  • springboot连接不上redis的三种解决办法

    2022-03-21 20:57:23
  • Java毕业设计实战之线上水果超市商城的实现

    2021-09-15 19:23:01
  • Java多线程开发工具之CompletableFuture的应用详解

    2023-08-30 00:43:00
  • Java中输入与输出的方法总结

    2021-06-07 22:02:15
  • Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)

    2023-11-21 10:01:27
  • Spring Boot支持Crontab任务改造的方法

    2023-08-08 20:20:24
  • 多线程如何解决for循环效率的问题

    2023-12-02 08:31:55
  • springboot集成开发实现商场秒杀功能

    2022-06-23 11:05:27
  • Java面向对象编程的三大特征

    2023-09-19 06:20:34
  • 详解Java如何实现小顶堆和大顶堆

    2023-11-10 04:03:05
  • Java实战之王者荣耀的英雄是怎么产生的?

    2021-08-25 12:35:49
  • springboot项目配置多个kafka的示例代码

    2023-11-23 23:15:29
  • Kafka 日志存储实现过程

    2021-11-01 05:04:00
  • 基于Java编写一个PDF与Word文件转换工具

    2023-05-30 19:23:12
  • asp之家 软件编程 m.aspxhome.com