Dart基础篇 2.面向对象

构造方法:

        有参构造方法

        无参构造方法

        命名构造方法

        命名工厂构造方法

        工厂构造方法

定义Dart类Person

///定义一个Dart类,所有类都继承自Object
class Person {
  String name;
  int age;

  //父类构造方法
  Person(this.name, this.age);

  //重写父类toString
  @override
  String toString() {
    return 'name:$name , age: $age';
  }
}

 定义Dart类Student集成Person类

///面向对象
class Student extends Person {
  //定义类的变量
  late String _school; //通过下划线来表示私有字段(变量)
  String? city;
  String? country;
  late String name;

  ///构造方法:
  ///通this.school初始化自有参数
  ///name,age交给父类进行初始化
  ///city为可选参数
  ///country设有默认参数
  Student(this._school, String name, int age, {this.city, this.country = "中国"})
      : name = '$country.$city',
        super(name, age) {
    //构造方法提不是必须的
    print("构造方法提不是必须的");
  }

  ///命名构造方法
  Student.cover(Student stu) : super(stu.name, stu.age) {
    print("命名构造方法");
  }

  ///命名工厂构造方法 factory 类名.方法名
  ///他可以有返回值,而且不需要讲类的final变量作为参数,是提供一种灵活获取类对象的方式。
  factory Student.stu(Student stu) {
    return Student(stu._school, stu.name, stu.age,
        city: stu.city, country: stu.country);
  }

  @override
  String toString() {
    return 'name:$name school:${this._school},city:$city,country:$country ${super.toString()}';
  }

  //可以为私有字段设置getter来让外界获取到私有字段
  String get school => _school;

  //可以为私有字段设置getter来让外界获取对私有字段的修改
  set school(String value) {
    _school = value;
  }

  //静态方法
  static doPrint(String str) {
    print("doPrint:$str");
  }
}
通过下划线来表示私有字段(变量)

  构造方法,可以设置默认参数 ,可选参数{}中指定默认参数,和可选参数

  子类构造方法必须要实现父类的构造方法

  命名构造方法 定义:类名.方法名

  命名工厂构造方法 factory 类名.方法名(他可以有返回值) 


 

///继承抽象类要实现它的抽象方法,否则也需要将自己定义成抽象类
class StudyFlutter extends Study {
  @override
  void study() {
    print('Learning Flutter');
  }
}

///使用 abstract 修饰符来定义一个抽象类,该类不能被实例化。抽象类在定义接口的时候非常有用,实际上抽象中也包含一些实现
abstract class Study {
  void study();
}

///为类添加特征:mixins
///mixins 是在多个类层次结构中重用代码的一种方式
///要使用 mixins ,在 with 关键字后面跟一个或多个 mixin 的名字(用逗号分开),并且with要用在extends关键字之后
///mixins的特征:实现 mixin ,就创建一个继承 Object 类的子类(不能继承其他类),不声明任何构造方法,不调用 super
///猜猜上面的类中哪个是mixin?

class Test extends Person with Study {
  Test(String name, int age) : super(name, age);

  @override
  void study() {
    // TODO: implement study
  }
}

 

使用 abstract 修饰符来定义一个抽象类,该类不能被实例化。抽象类在定义接口的时候非常有用,实际上抽象中也包含一些实现
为类添加特征:mixins
mixins 是在多个类层次结构中重用代码的一种方式
要使用 mixins ,在 with 关键字后面跟一个或多个 mixin 的名字(用逗号分开),并且with要用在extends关键字之后
mixins的特征:实现 mixin ,就创建一个继承 Object 类的子类(不能继承其他类),不声明任何构造方法,不调用 super
猜猜上面的类中哪个是mixin?

具体调用

///面向对象
_oopLearn(){
  //创建Student对象
  Student stu1 = Student('清华', "majunbao", 20);
  print(stu1.toString());
  stu1.school = '985';
  print(stu1.toString());

  Student.doPrint('_oopLearn');


  Logger logger1 = Logger();
  Logger logger2 = Logger();
  //通过工厂方法每次创建的 都是 同一个对象 所以返回true
  print(logger1 == logger2); // true
  logger1.log("majunbao");
  logger2.log("majunbao");

  StudyFlutter sf = StudyFlutter();
  sf.study();

}

 

class DataType extends StatefulWidget {
  const DataType({Key? key}) : super(key: key);

  @override
  State<DataType> createState() => _DataTypeState();
}

class _DataTypeState extends State<DataType> {
  @override
  Widget build(BuildContext context) {
    //面向对象
    _oopLearn();
    return Container(
      child: const Text("面向对象 ,请查看控制台输出"),
    );
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值