java中dart类详细讲解

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类讲解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Google Dart编程语法和基本类型学习教程

    1. 变量声明 如何定义变量 复制代码 代码如下: var name = 'Bob'; 变量的初始值 复制代码 代码如下: int lineCount;assert(lineCount == null); // Variables (even numbers) are initially null. 可以使用var,也可以直接指定类型.final, 定义为final的变量,值不能够被更改 复制代码 代码如下: final name = 'Bob'; // Or: final String nam

  • Flutter 中 Dart的Mixin示例详解

    原文在这里.写的不错,推荐各位看原文. 这里补充一下Mixin的定义: 只要一个类是继承自Object的而且没有定义构造方法,那么这个类可以是一个Mixin了.当然,如果你想让mixin的定义更加的清晰,可以使用mixin关键字开头来定义.具体请参考这里 原文截图体会一下风格. 正文 在经典的面向对象编程语言里一定会有常规的类,抽象类和接口.当然,Dart也有它自己的接口,不过那是另外的文章要说的.有的时候阴影里潜伏者另外的野兽:Mixin!这是做什么的,如何使用?我们来一起发现. 没有mixi

  • 谷歌Sky语言怎么样?什么是Dart编程语言?

    Q:谷歌Sky语言怎么样?Sky编程语言有哪些优势? A:Sky语言是谷歌近期推出的一款全新的自主网页编程语言Dart,谷歌推出Dart编程语言的目的是为了提升Android应用的流畅度.Sky语言的主要优势在于:可兼容iOS,为Android应用带来120fps的超级流畅体验. 作为当前市占率最高的智能手机操作系统,Android平台正在吸引着越来越多的开发者.不过,对用户而言,Android的体验还不够完善,卡顿的情况时有发生.再深入点理解,许多应用的帧率达不到普遍意义上流畅的标准60fps

  • java中dart类详细讲解

    dart 是一个面向对象的语言;面向对象有 继承 封装 多态 dart的所有东西都是对象,所有的对象都是继承与object类 一个类通常是由属性和方法组成的 在dart中如果你要自定义一个类的话,将这个类放在main函数外面 类名使用大驼峰方法名使用小驼峰 1.定义这个类的属性和方法 //定义一个类的属性和方法 class Person { String name = '张三'; int age = 19; void getInfo() { // print('我叫$name,今年$age');

  • Java Thread多线程开发中Object类详细讲解

    目录 方法概览 Thread wait  notify notifyAll方法详解 作用 阻塞阶段 唤醒阶段 遇到中断 代码展示 特点 通过wait notify方法实现生产者和消费者 sleep方法详解 sleep不会释放锁 sleep响应中断 总结 join方法详解 代码展示 yield方法 方法概览 Thread wait  notify notifyAll方法详解 作用 阻塞阶段 使用了wait方法之后,线程就会进入阻塞阶段,只有发生以下四种情况中的其中一个,线程才会被唤醒 另一个线程调

  • Java中ArrayList类详细介绍

    Java中ArrayList类详细介绍 ArrayList是一个可变长度数组,它实现了List接口,因此它也可以包含重复元素和Null元素,也可以任意的访问和修改元素,随着向 ArrayList 中不断添加元素,其容量也自动增长.不过ArrayList是非同步(同步的意思是如果多个线程同时访问一个实例,任何一个线程对实例做了修改之后,其他线程所访问到的实例应该是修改过的最新的实例)的, 我们经常使用List list = Collections.synchronizedList(new Arra

  • Java中Swing类实例讲解

    Swing类部分画图方法讲解 定义框架 JFrame jFrame=new JFrame("标题名字"); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置用户在此窗体上发起 "close" 时默认执行的操作. //有两种选择,默认是 HIDE_ON_CLOSE即点击关闭时隐藏界面. jFrame.setBounds(0,0,1200,1200); //设置框架的大小 jFrame.setVisi

  • Java中Properties 类的详细使用

    我把你的头像,设置成我的名字,此刻你便与我同在. 我把你的名字,写进我的代码里面,以后,我的世界便存在着你. 一.Properties 类 Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类, Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties. 这里,讲解一下Properties 类的具体使用. 以key=value 的 键值

  • 浅谈Java中Properties类的详细使用

    目录 一.Properties 类 二.打印JVM参数 三.打印自定义.properties文件中的值 3.1.list输出到控制台用绝对路径加载 3.2.propertyNames输出getClass()加载 3.3.stringPropertyNames输出getClassLoader加载(推荐) 四.获取值getProperties 五.写入到Properties文件 5.1.普通写入,中文时乱码 5.2.解决乱码写入的问题 六.加载和导出到xml配置文件 6.1.导出到.xml配置文件s

  • Java中Scanner类与BufferReader类的不同点(非常详细)

    java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串.它本质上是使用正则表达式去读取不同的数据类型. Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本. 下面是两个类的不同之处: 当nextLine()被用在nextXXX()之后,用Scanner类有什么问题 尝试去猜测下面代码的输出内容: // Code using Scanner Class import java.util.Scanner; c

  • java中Object类4种方法详细介绍

    目录 Object(四大方法): hashCode()方法: equals()方法: getClass()方法: toString()方法: 总结 Object(四大方法): 文章干货满满,耐性看完~~何为Object?首先先来看看官方对Object的介绍:在这里附上Java官方的查阅工具:https://docs.oracle.com/en/java/javase/17/docs/api/index.html 由官方介绍可见,object属于Java.lang包内的一个类,而且提供了很多种方法

  • redis在java中的使用(实例讲解)

    1.首先下载jar包放到你的工程中 2.练习 package com.jianyuan.redisTest; import java.util.Iterator; import java.util.List; import java.util.Set; import redis.clients.jedis.Jedis; public class RedisTest { public static void main(String[] args) { //连接本地的Redis服务 Jedis je

  • Java中BufferedReader类获取输入输入字符串实例

    使用Scanner来取得使用者的输入很方便,但是它以空白来区隔每一个输入字符串,在某些时候并不适用,因为使用者可能输入一个字符串,中间会包括空白字元,而您希望取得完整的字符串. 您可以使用BufferedReader类别,它是java.io包中所提供的一个类,所以使用这个类时必须先import java.io包:使用BufferedReader对象的readLine()方法必须处理IOException异常(exception),异常处理机制是Java提供给程序设计人员捕捉程序中可能发生的错误所

随机推荐