7.面向对象
dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,所有的类都是Object的子类,换句话说就是万物皆对象
#7.1.类与对象
void main() {
// 注意:new关键字可以省略
var p = new Person();
p.name = "xiaoqiang";
p.showName();
p.showAge();
}
class Person {
String name;
int age;
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
}
注意1:可以使用final来创建一个只读的属性
void main() {
// 注意:new关键字可以省略
var p = new Person();
p.name = "xiaoqiang";
p.showName();
p.showAge();
p.gender = "女"; // 报错, gender定义的时候是不能修改的
}
class Person {
String name;
int age;
final String gender="男";
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
}
注意2: 方法不能被重载
class Person {
String name;
int age;
final String gender="男";
void showName(){
print("名字是:${name}");
}
void showAge () {
print("年龄是:${age}");
}
void showName () { // 报错
print("名字是:${name}");
}
}
#7.2.计算属性
计算属性从字面上可以理解为值是通过计算得来的
import 'dart:math';
void main() {
// 注意:new关键字可以省略
var p = new RrightTriangle();
// p.a = 3;
// p.b = 4;
// print(p.c);
p.c = 5;
print(p.a);
}
class RrightTriangle {
num a, b;
num get c {
return sqrt(a*a + b*b);
}
set c(value) {
a = sqrt(pow(value, 2) - 16);
}
}
#7.3.构造方法
构造方法就是我们创建对象时调用的方法,如果没有自定义构造方法,则会调用默认的构造方法, 如果存在自定义的构造方法,则默认方法就无效,同时构造方法是不能重载的
void main() {
// 注意:new关键字可以省略
var p = new Person("xiaoqiang", 12, "男");
print(p.name);
}
class Person {
String name;
num age;
String gender;
Person(this.name, this.age, this.gender){
print(this.name);
print(this.age);
print(this.gender);
}
// 如果再定义一个Person方法就会报错
}
可以定义多个构造方法
void main() {
// 注意:new关键字可以省略
var p = new Person("xiaoqiang", 12, "男");
print(p.name);
// 创建对象的时候,可以使用fn构造方法
var p2 = new Person.fn("xiaohong", 12);
}
class Person {
String name;
num age;
String gender;
Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
print(this.name);
print(this.age);
print(this.gender);
}
Person.fn(name, age) {
print(name);
print(age);
}
}
如果一个类是不可变的,这个时候我们需要使用const来声明构造方法,并且把所有变量都设置为final
import 'dart:math';
void main() {
// 注意:new关键字可以省略
var p = const Person("xiaoqiang", 12, "男");
p.name = "xxx"; // 报错
}
class Person {
final String name;
final num age;
final String gender;
const Person(this.name, this.age, this.gender);
}