网站首页 > 博客文章 正文
本文同步本人掘金平台的文章:https://juejin.cn/post/7126712706282815496
面向对象是一种重要的编程思想。比如你需要指明 Jimmy 在说话,那么你先得从人这个类中实例化 Jimmy 出来:
void main() {
var person = new Person();
person.sayHi('Jimmy');
}
class Person {
sayHi(String name) {
print(name + ' is speaking...'); // Jimmy is speaking...
}
}
复制代码
推荐使用线上编辑器 dartpad.cn 进行学习,测试~
Dart 是一门面向对象的编程语言,具备类和基于混入的继承。所有的类都派生自 Object。
面向对象基本特征
讨论面向对象,了解它们的特征,很重要。这也是面试过程中,面试官喜欢考察的一个知识点。
封装
封装就是把内部的实现隐藏起来,然后只是暴露必要的方法让外部调用。暴露的方法我们称之为接口。
还是拿刚才的示例来说明:
class Person {
sayHi(String name) {
print(name + ' is speaking...'); // Jimmy is speaking...
}
}
复制代码
这里我知识暴露出了一个 sayHi 的方法,你不需要管里面是怎么实现的,实现有多简单或者多复杂,你只要按照要求调用这个接口就行了,比如:
/*
* 调用 sayHi 接口
* @Function sayHi
* @param <String> name
* @return void
*/
复制代码
继承
所谓的继承,就是使得子类具有父类等的各种公开的方法和属性。比如:
// 父类继承
void main() {
var dog = new Dog('Tom');
dog.sleep(); // Tom must go to sleep.
}
class Animal {
String name;
Animal(this.name);
sleep() {
print(this.name + ' must go to sleep.');
}
}
class Dog extends Animal {
Dog(String name) : super(name);
barking() {
print('Dog is barking.');
}
}
复制代码
多态
多态可以理解为相同的行为,不同的实现方式。比如:狗生活 live 在陆地上,鱼儿生活 live 在水里,如下:
void main() {
var dog = new Dog();
var fish = new Fish();
dog.live(); // Jimmy living on land.
fish.live(); // Tom living in water.
}
// 定义一个抽象类
abstract class Animal {
late String name;
live(); // 生存
}
class Dog extends Animal {
@override
String name = 'Jimmy';
@override
live() {
print(this.name + ' living on land.');
}
}
class Fish extends Animal {
@override
String name = 'Tom';
@override
live() {
print(this.name + ' living in water.');
}
}
复制代码
抽象
我们一般说面向对象的三个特征:封装,继承和多态。抽象也是面向对象的一个本质特征。比如我们上面举的多态的例子中,我们可以找到 Dog 和 Fish 的共性,并将他们抽象出来表示。
// 定义一个抽象类
abstract class Animal {
late String name; // 名字
live(); // 生存(抽象方法)
eat() { // 非抽象方法
print('Can eat.');
}
}
复制代码
类声明
Dart 中,一个类的实现包括类声明和类体。类声明的语法格式:
[ abstract ] class className [extends superClassName] [implements interfaceName] [with className1, className2, ...] {
// 类体
}
复制代码
- abstract 表示该类是抽象类,此关键字可省略,推荐加上
- extends 是继承类的关键字,superClassName 是父类类名
- implements 是实现某个接口的关键字,interfaceName 是接口名称
- with 是混入多个类的关键字,多个类用 , 分隔开
类构成
Dart 中类的构成,包含:
- 类名
- 成员变量
- 成员方法
- 构造方法
类名
声明一个类的时候,关键字 class 后面的 className 名称就是类名...
成员变量
声明类中成员变量的格式,如下:
class className {
// 成员变量
[static][const][final] type name;
}
复制代码
- type 是成员变量的数据类型
- name 是成员变量名
- [static][const][final] 是成员变量的修饰符 static 表示成员变量在类本身可以使用,在类的实例上不可用 const 用来定义常量,值不可改变 final 表示单一赋值,赋值后不能更改 final 变量的值
?? const 和 final 的区别在于:const 比 final 更加严格。final 只是要求变量在初始化后值不变,但是通过 final 无法在编译时(运行之前)知道这个变量的值,而 const 是修饰编译时的常量,从一开始就知道它的值。
成员方法
声明类中成员方法的格式,如下:
class className {
// 成员方法
[static][type] methodName(paramType: paramName, ...) [async] {
// 方法体
}
}
复制代码
- type 表示函数方法返回值的数据类型
- methodName 表示方法名
- static 是方法修饰符,表示该方法只能是类本身调用,不能在实例上可用
- paramType 表示方法参数类型,paramName 表示方法参数名称;可以有多个参数,用 , 来分隔开
- async 表示方法是异步的
构造方法
构造方法是类中的特殊的方法。在类进行初始化的时候执行,比如:
void main() {
var person = new Person('Jimmy', 100);
person.sayHi(); // Hello Jimmy.
}
class Person {
String name = '';
double height = 0.0;
// 构造函数
Person(this.name, this.height);
sayHi() {
print('Hello ' + this.name + '.');
}
}
复制代码
关于构造函数,后面会有文章详细介绍...
如果读者觉得文章还可以,不防一键三连:关注?点赞?收藏
猜你喜欢
- 2024-09-18 《黑神话:悟空》的编程语言 #悟空
- 2024-09-18 常用的软件编程语言,你学会了多少门?
- 2024-09-18 Python是一种高级、解释型、动态类型、面向对象的编程语言
- 2024-09-18 Python 是 100% 面向对象的吗?(python有面向对象吗)
- 2024-09-18 JAVA语言对象的创建及使用(java创建对象语句)
- 2024-09-18 聊一下,面向对象软件的一般过程与方法
- 2024-09-18 让chatGPT帮我整理的面向对象编程概念,你觉得合格吗
- 2024-09-18 编程范式-面向对象编程(面向对象编程的五大原则)
- 2024-09-18 如何把C语言写出面向对象的效果?(c语言如何实现面向对象编程)
- 2024-09-18 C++面向对象总结:虚指针与虚函数表,干货又来了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)