面向对象编程(OOP)的三大基本特征是:封装,继承,多态
Dart所有的东西都是对象,所有的对象都继承自Object类
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
一个类通常有属性和方法组成。
01 Dart中自定义类 使用类
//Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类
class Person{
//变量
String name="张三";
int age=23;
//方法
void getInfo(){
print("${this.name}----${this.age}");
}
void setInfo(int age){
this.age=age;
}
}
void main(){
//实例化
var p1=new Person();
print(p1.name);//调用属性 张三
p1.getInfo();//调用方法 张三----23
p1.setInfo(28);//变量赋值
p1.getInfo();//调用方法 张三----28
}
02 Dart中自定义类的默认构造函数
class Person{
String name;
int age;
// 默认构造函数
// Person(this.name,this.age){
// this.name=name;
// this.age=age;
// }
//默认构造函数的简写
Person(this.name,this.age);
//打印
void getInfo(){
print("${this.name}----${this.age}");
}
}
void main(){
var p=new Person("张三",20);
p.getInfo();//张三----20
var p2=new Person("李四",25);
p2.getInfo();//李四----25
}
03 Dart中自定义类的命名构造函数
//dart里面构造函数可以写多个
class Person{
String? name;
int? age;
//默认构造函数的简写
Person(this.name,this.age);
//命名构造函数1
Person.now(){
print("我是命名构造函数");
}
//命名构造函数2
Person.setInfo(String name,int age){
this.name=name;
this.age=age;
}
void getInfo(){
print("${this.name}----${this.age}");
}
}
void main(){
Person p1=new Person("张三", 20);//默认实例化类的时候调用的是 默认构造函数
p1.getInfo();//张三----20
Person p2=new Person.now();//初始化的时候调用命名构造函数
Person p3=new Person.setInfo("李四", 25);//初始化的时候调用命名构造函数
p3.getInfo();//李四----25
}
04 Dart中把类单独抽象成一个模块
新建一个文件夹lib,封装一个类Person,并调用它
class Person{
String name;
int age;
//默认构造函数的简写
Person(this.name,this.age);
void getInfo(){
print("${this.name}----${this.age}");
}
}
调用
import 'lib/Person.dart';
void main(){
Person p1=new Person("李四", 33);
p1.getInfo();//李四----33
}
05 Dart中的私有方法和私有属性
Dart和其他面向对象语言不一样,Data中没有public private protected这些访问修饰符号
但是我们可以使用_把一个属性或者方法定义成私有
首先,封装一个类Animal,并调用它的私有方法和私有属
class Animal {
String _name;//私有属性
int age;
//默认构造函数的简写
Animal(this._name,this.age);
void getInfo(){
print("${this._name}----${this.age}");
}
String getName(){
return this._name;
}
//私有方法只有在当前类才能访问
_run(){
print("这是一个私有方法");
}
execRun(){
this._run();//类里面方法的相互调用
}
}
调用
import 'lib/Animal.dart';
void main(){
/**
*
* Dart和其他面向对象语言不一样,Data中没有public private protected这些访问修饰符号
* 但是我们可以使用_把一个属性或者方法定义成私有
*
*/
Animal a=new Animal("小猫", 3);
print(a.age);//可以访问
// print(a._name);//被设置成私有属性没法访问
//可以通过公有的方法,间接的去调用私有的属性
print(a.getName());//小猫
//可以通过公有的方法,间接的去调用私有的方法
a.execRun();
}
06 类中的getter和setter修饰符的用法
class Rect{
num height=0;
num width=0;
Rect(this.height,this.width);
//get属性
get area{
return this.height*this.width;
}
//set属性
set areaHeight(value){
this.height=value;
}
}
void main(){
Rect r=new Rect(10,2);
print("面积:${r.area}");//注意调用直接通过访问属性的方法访问area
r.areaHeight=6;
print(r.area);//12
}
07 类中的初始化列表
//Dart 中我们也可以在构造方法体运行之前初始化实例变量
class Rect{
num height=0;
num width=0;
//先赋值再执行构造函数
Rect():height=2,width=10{
print("${this.height}----${this.width}");
}
getArea(){
return this.height*this.width;
}
}
void main(){
Rect r=new Rect();
print(r.getArea());//20
}