静态属性和静态方法

在dart中,我们可以通过关键字
static来定义静态属性和静态方法。 需要注意的是:
静态方法不能访问非静态属性【结论1】
非静态方法可以访问静态成员【结论2】
我们通过下面的一段代码来解释【结论1】和【结论2】 访问静态属性或者调用静态方法
直接通过类来访问

访问静态属性和静态方法

void main() {
// 调用静态方法
PerSonInfo.showInfo();
// 访问静态属性
print(PerSonInfo.name);
} class PerSonInfo {
static String name = '张三';
int age; static void showInfo() {
【结论1】
// 会报错,静态方法中,不能够访问非静态属性
// print(age);
print(name);
} // 非静态方法中可以访问静态成员【结论2】
show() {
print('姓名$name');
print('年龄$age');
}
}

级联操作符 .. 的使用

void main() {
var p = new PerSonInfo('张三', 10);
// p.name = '李四';
// p.age = 50;
// p.show(); //等价上面的代码
p
..name = '李四'
..age = 50
..show();
} class PerSonInfo {
String name;
int age;
PerSonInfo(this.name, this.age);
show() {
print(this.name);
print(this.age);
}
}

dart中的继承

我们都知道dart一门面向对象的语言
那么面向对象的语言中
有继承、封装、多态、这三个基本特征 继承:
子类使用extends关键字来继承父类
子类会继承父类中可见的属性和方法
但是不会去继承父类中的构造函数
子类是可以去重写父类中的方法
下面我们写一个Grils类去继承父类PerSonInfo
虽然Grils类中什么都没没有写
我们看一下是否可以继承父类中的属性和方法
void main() {
var g = new Grils();
g.show();
} class PerSonInfo {
String name='张三';
int age=10;
show() {
print(this.name);
print(this.age);
}
}
class Grils extends PerSonInfo {}

继承时需要注意的点

class PerSonInfo {
String name = '张三';
int age = 10;
PerSonInfo(this.name,this.age);
show() {
print(this.name);
print(this.age);
}
} //Grils 会报错
//因为子类是不能够去继承父类中的构造方法的
class Grils extends PerSonInfo {}
遇见的问题:
如果我们不要PerSonInfo类的构造函数
那么这个PerSonInfo类只能够输出一个人的信息
如何解决了

子类调用父类的构造函数super

void main() {
var g = new Grils('李四',30);
g.show();
} class PerSonInfo {
String name = '张三';
int age = 10;
PerSonInfo(this.name,this.age);
show() {
print(this.name);
print(this.age);
}
} class Grils extends PerSonInfo {
//super我们可以理解为调用父类中的额构造并且赋值
Grils(String name, int age) : super(name, age);
}

子类可以有自己的属性和方法

void main() {
var g = new Grils('李四', 30, '女');
g.show();
g.say();
} class PerSonInfo {
String name = '张三';
int age = 10;
PerSonInfo(this.name, this.age);
show() {
print(this.name);
print(this.age);
}
} class Grils extends PerSonInfo {
//子类中自己的属性
String sex;
Grils(String name, int age, String sex) : super(name, age) {
this.sex = sex;
} //子类中自己的方法
say() {
print('你好呀');
}
}

优先调用子类方法的如果子类没有在去找父类

void main() {
var g = new Grils();
g.say();//输出 你好呀,我是子类
} class PerSonInfo {
say() {
print('你好呀,我是父类');
}
} class Grils extends PerSonInfo { say() {
print('你好呀,我是子类');
}
}

给命名构造函数传递参数

void main() {
var g = new Grils('李四', 30, '女');
g.show();
g.say();
} class PerSonInfo {
String name = '张三';
int age = 10;
PerSonInfo(this.name, this.age);
PerSonInfo.mingFun(this.name, this.age); show() {
print(this.name);
print(this.age);
}
say() {
print('你好呀,我是父类');
}
} class Grils extends PerSonInfo {
String sex;
Grils(String name, int age, String sex) : super.mingFun(name, age) {
this.sex = sex;
} say() {
print('你好呀,我是子类');
}
}

复写父类中的方法

在项目的实际开发中
父类中的方法可能不在适用了
那么这个时候我们可以重写父类中的方法
重写父类中的方法可以让代码变得可以扩展
覆写父类中的方法,不需要添加分号
@override
void main() {
var g = new Grils('李四', 30, '女');
g.say();
} class PerSonInfo {
String name;
int age;
PerSonInfo(this.name, this.age);
say() {
print('你好呀,我是父类');
}
} class Grils extends PerSonInfo {
String sex;
Grils(String name, int age, String sex) : super(name, age) {
this.sex = sex;
}
// 覆写父类中的方法,不需要添加分号
@override
say() {
print('你好呀,我是子类');
}
}

让你看懂dart中静态成员和继承的更多相关文章

  1. 转://看懂Oracle中的执行计划

    一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sq ...

  2. dart系列之:安全看我,dart中的安全特性null safety

    目录 简介 Non-nullable类型 Nullable List Of Strings 和 List Of Nullable Strings !操作符 late关键字 总结 简介 在Dart 2. ...

  3. 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

    关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个 ...

  4. 手模手配置Eslint,看懂脚手架中的Eslint

    使用ESLint前:eslint是干嘛的,我这样写有什么问题,怎么还报错了,太麻烦想去掉这个插件,脚手架中关于eslint文件里的配置是什么意思?怎么设置配置项和规则达到自己想要的检测效果呢?怎么集成 ...

  5. 带你看懂LayoutInflater中inflate方法

    关于inflate问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东 ...

  6. 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的

    前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...

  7. 【转】三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

    关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个 ...

  8. 一篇文章看懂mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别

    看完这篇文章,你能搞清楚以下问题: 1.varchar(100)和varchar(10)的区别在哪里? 2.varchar能存多少汉字.数字? 3.varchar的最大长度是多少呢? 4.字符.字节. ...

  9. 一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY

    一. 客户区坐标位置(clientX,clientY) 鼠标事件都是在浏览器视口中的特定位置发生的.这个位置信息保存在事件对象的clientX和clientY属性中,所有浏览器都支持这两个属性. 我们 ...

  10. 一文看懂js中元素的滚动大小(scrollWidth,scrollHeight,scrollTop,scrollLeft)

    滚动大小(scroll dimension) 滚动大小指的是包含滚动内容元素的大小. 以下是与元素滚动内容大小相关的属性: 1. scrollWidth:在没有滚动条的情况下,元素内容的总宽度. 2. ...

随机推荐

  1. win10中Docker安装、构建镜像、创建容器、Vscode连接实例

    Docker方便一键构建项目所需的运行环境:首先构建镜像(Image).然后镜像实例化成为容器(Container),构成项目的运行环境.最后Vscode连接容器,方便我们在本地进行开发.下面以一个简 ...

  2. Java中的Servlet基本概述

    1 Servlet基本生命周期 一个Servlet是HttpServlet的子类,由支持Servlet的服务器完成该子类的对象初始化的工作.当有多个客户端请求同一个Servlet时候,servlet引 ...

  3. 秒懂Java为什么只有值传递

    在Java语言中,数据类型分为基本数据类型和引用数据类型. 基本数据类型(如int.double.char等)的值直接保存在栈上.这些类型的变量在栈内存中有固定的大小,并且值是直接存储在这些变量中的, ...

  4. linux下的rpm与yum

    一.源代码形式 1.      绝大多数开源软件都是直接以原码形式发布的 2.      源代码一般会被打成.tar.gz的归档压缩文件 3.      源代码需要编译成为二进制形式之后才能够运行使用 ...

  5. AtCoder Beginner Contest 152

    Flatten 给定\(n\)个正整数\(a_i\),,现在让你求出\(n\)个整数\(b_i\),使得任取\(1\le i < j \le n\),\(a_ib_i=a_jb_j\)始终成立, ...

  6. HarmonyOS Next 集成支付宝SDK后无法在模拟器上安装调试的问题

    之前使用模拟器调试都正常,在集成支付宝SDK后,同事说在模拟器上无法安装调试,因为真机资源不够,模拟器不能用实在耽误事,所以就花了点时间研究一下. 报错原因 官方文档的解释 根据文档的说明,应该是cp ...

  7. C#生成二维码的两种方式(快看二维码)

    前言 最近在做项目的时候遇到一个需求是将文本内容生成二维码图片的,对于这个需求那就直接上手(两种方法,我比较喜欢第二种方式,往上面也是有很多的方法.这里只作为个人纪录) 方法一:ThoughtWork ...

  8. RAG七十二式:2024年度RAG清单

    回顾2024,大模型日新月异,智能体百家争鸣.作为AI应用的重要组成部分,RAG也是"群雄逐鹿,诸侯并起".年初ModularRAG持续升温.GraphRAG大放异彩,年中开源工具 ...

  9. 前端17号学习(html完结)

    一.路径 1.目录文件夹和跟目录 实际工作中需要创建一个文件夹来管理他们. 目录文件夹,就是普通文件夹,里面存放页面相关素材,如html文件.图片等. 根目录,打开目录文件夹的第一层就是根目录. 2. ...

  10. Google Chrome谷歌浏览器离线/绿色版本安装与彻底卸载

    一.离线安装 1.下载官方最新安装包安装 直接下载链接 Windows 32 位最新稳定版: https://dl.google.com/tag/s/installdataindex/update2/ ...