Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
创建类
class Persion{
// name 不可为空 可以增加late 或默认值
late String name ;
// age 不可为空 可以增加late 或默认值
int age = 0 ;
void getInfo(){
print("$name $age");
}
}
构造函数
//创建类
class Persion{
late String name = "哈哈";
int age = 0 ;
void getInfo(){
print("$name $age");
}
// 默认构造函数
Persion(){
}
}
class Persion{
late String name;
late int age;
// Persion(String name,int age){
// this.name = name;
// this.age = age;
// }
// 下面是上面的简写,是等价的
Persion(this.name,this.age);
}
class Persion{
late String name;
late int age;
// 这样写需要加 late
Persion(String name,int age){
this.name = name;
this.age = age;
}
}
class Persion1{
String name;
int age;
// 这样写不需要加late
Persion1(this.name,this.age);
}
Dart命名构造函数
Dart里面构造函数可以写多个,这个时候我需要通过命名构造函数来实现。
回顾一下我们前面用到的命名构造函数,下面代码表示实例化DateTime调用它的命名构造函数。
//调用的就是命名构造函数
var data = new DateTime.now();
class Persion{
late String name;
late int age;
// 默认构造函数
Persion(this.name,this.age);
Persion.now(){
print("命名构造函数");
}
Persion.setInfo(String name,int age){
this.name = name;
this.age = age;
}
}
var p1 = new Persion('哈哈', 45);
var p2 = new Persion.now();
var p3 = new Persion.setInfo('呵呵', 60);
// 最新版本创建对象可以不加new
var p4 = Persion('哈哈', 45);
Dart中我们也可以在构造函数体运行之前初始化实例变量
class Persion{
String name;
int age;
Persion():name = "哈哈",age = 20{
}
}
私有方法和私有属性
Dart和其他面向对象语言不一样,Data中没有 public private protected这些访问修饰符符。 但是我们可以使用 _ 把一个属性或者方法定义成私有。
class Persion{
//私有属性
late String _name;
late int age;
getName(){
return this._name;
}
//私有方法
_run(){
}
}
Dart中的静态成员
1、使用static 关键字来实现类级别的变量和函数。 2、静态方法不能访问非静态成员,非静态方法可以访问静态成员
简单使用
void main(List<String> args) {
print(Persion.name);
Persion.show();
}
class Persion{
static String name = '哈哈';
static void show(){
print(name);
}
}
class Persion{
static String name = "哈哈";
int age = 20;
static void show(){
print(name);
}
// 非静态方法可以访问静态成员
void printInfo(){
print(name); //静态成员
print(age);
}
static void printUserInfo(){
print(name);
show();
// print(age); 不可访问
// printInfo(); 不可访问
}
}
Dart中的静态成员 中 as 类型转换 is类型判断 ..级联操作
class Persion{
late String name;
late int age;
// 这样写需要加 late
Persion(String name,int age){
this.name = name;
this.age = age;
}
void printInfo(){
print("$name -- $age");
}
}
void main(List<String> args) {
Object p = Persion('哈哈', 20);
// 判断类型
if (p is Persion){
p.name = "呵呵";
}
(p as Persion).printInfo();
print(p is Object);
Object b = Persion('大聪明', 20);
// 类型转换
(b as Persion).printInfo();
var p2 = Persion('哈哈', 34);
p2 ..name = '小李'
..age = 30
..printInfo();
}
Dart中类的继承
Dart中类的继承
- 子类使用extends关键词来继承父类。
- 子类会继承父类里面可见的属性和方法,但是不会继承构造函数。
class Persion{
String name = '';
int age = 20;
void printInfo(){
print('$name -- $age');
}
}
class Web extends Persion{
}
void main(List<String> args) {
var w = Web();
w.name = '哈哈';
w.printInfo();
}
class Persion{
String name = '';
int age = 20;
void printInfo(){
print('$name -- $age');
}
Persion(this.name,this.age)
}
class Web extends Persion{
// 子类不会继承父类的构造方法,
Web(String name, int age): super(name,age);
}
class Persion{
String name = '';
int age = 20;
void printInfo(){
print('$name -- $age');
}
Persion(this.name,this.age)
}
class Web extends Persion{
// 新增属性
late String sex;
// 子类不会继承父类的构造方法,
Web(String name, int age,String sex): super(name,age){
this.sex = sex;
}
}
// 调用父类的 自定义构造函数
class Persion{
String name = '';
int age = 20;
void printInfo(){
print('$name -- $age');
}
Persion(this.name,this.age);
Persion.info(this.name,this.age);
}
class Web extends Persion{
late String sex;
// super.info 调用父类的 自定义构造函数
Web(String name, int age,String sex): super.info(name, age){
this.sex = sex;
}
}
// override 重写父类的方法
class Persion{
String name = '';
int age = 20;
void printInfo(){
print('$name -- $age');
}
}
class Web extends Persion{
// 重写父类的方法
@override
void printInfo() {
// TODO: implement printInfo
super.printInfo();
}
}