面向对象编程(OOP)的三个基本特征是:封装、继承、多态sql
Dart全部的东西都是对象,全部的对象都继承自Object类。数据库
Dart是一门使用类和单继承的面向对象语言,全部的对象都是类的实例,而且全部的类都是Object的子类编程
一个类一般由属性和方法组成。ide
class Person {
// String name = '张三';
// int age = 32;
String name;
int age;
// 构造函数在实例化的时候触发
// Person() {
// print('构造函数在实例化的时候触发');
// }
// Person(String name, int age) {
// this.name = name;
// this.age = age;
// }
Person(this.name, this.age);
// 命名构造函数
Person.setInfo(String name, int age) {
this.name = name;
this.age = age;
}
void getInfo() {
print('${this.name}---${this.age}');
}
void setInfo(int age) {
this.age = age;
}
}
void main() {
Person p2 = new Person('Hiraku', 29);
p2.setInfo(28);
p2.getInfo();
Person p3 = new Person.setInfo('Hiraku', 29);
p3.getInfo();
}
复制代码
_
表示私有属性class Reac {
num height;
num width;
Reac(this.height, this.width);
get area {
return this.height * this.width;
}
}
void main() {
Reac r = new Reac(8, 16);
print('面积:${r.area}');
}
复制代码
class Reac {
num height;
num width;
Reac(this.height, this.width);
set reacHeight(num val) {
this.height = val;
}
get area {
return this.height * this.width;
}
}
void main() {
Reac r = new Reac(8, 16);
r.reacHeight = 1;
print('面积:${r.area}');
}
复制代码
class Reac {
num height;
num width;
Reac():height = 20, width = 30{
print('${this.height}===${this.width}');
}
set reacHeight(num val) {
this.height = val;
}
get area {
return this.height * this.width;
}
}
void main() {
Reac r = new Reac();
print('面积:${r.area}');
}
复制代码
class Person {
static String name = '张三';
static void show() {
print(name);
}
}
void main() {
print(Person.name);
Person.show();
}
复制代码
class Person {
static String name = '张三';
int age=20;
static void show() {
print(name);
}
void printInfo() { /*非静态方法能够访问静态成员以及非静态成员*/
// print(name); // 访问静态属性
// print(this.age); // 访问非静态属性
show(); // 调用静态方法
}
static void printUserInfo() {// 静态方法
print(name); // 静态属性
show(); // 静态方法
// print(this.age); // 静态方法无法访问非静态的属性
// this.printInfo(); // 静态方法无法访问非静态的方法
// printInfo();
}
}
void main() {
// print(Person.name);
// Person.show();
// Person p = new Person();
// p.printInfo();
Person.printUserInfo();
}
复制代码
?
条件运算符 (了解)as
类型转换is
类型判断..
级联操做 (连缀) (记住)class Person {
String name;
int age;
Person(this.name, this.age);
printInfo() {
print('${this.name}--${this.age}');
}
}
void main() {
Person p;
p.printInfo(); // 报错
p?.printInfo();
print(p is Person); // true
print(p is Object); // true
}
void main() {
var p1;
p1 = '';
p1 = new Person();
(p1 as Person).printInfo();
}
void main() {
Person p1 = new Person('Hiraku', 29);
p1.printInfo(); // Hiraku--29
p1.name = '马红琴';
p1.age = 18;
pi.printInfo(); // 马红琴--18
p1..name = '马红琴'
..age = 18
..pringInfo(); // 马红琴--18
}
复制代码
extends
关键词来继承父类getter
和 setter
class Person {
String name;
int age;
Person(this.name, this.age);
Person.work(this.name) { // 命名构造函数
print('${this.name} is working');
};
void printInfo() {
print('${this.name}--${this.age}');
}
void isJoking() {
print('${this.name}---is joking');
}
}
class Web extends Person {
String sex;
Web(String name, int age, String sex) : super(name, age) {
this.sex = sex;
}
void printFun() {
print('${this.name}--${this.age}--${this.sex}');
}
}
class Design extends Person {
String sex;
Design(String name, int age, String sex) : super.work(name) {
this.age = age;
this.sex = sex;
}
void printFun() {
super.isJoking(); // 子类调用父类的方法
print('${this.name}--${this.age}--${this.sex}');
}
@overage
void printInfo() { // 复写父类方法
print('姓名:${this.name}');
}
}
void main() {
Web w = new Web('Hiraku', 29, '女');
Design d = new Design('Hiraku', 29, '女');
w.printFun();
d.printFun();
}
复制代码
Dart中抽象类: Dart 抽象类主要用于定义标准,子类能够继承抽象类,也能够实现抽象类接口。函数
abstract
关键字来定义extends
抽象类和 implements
的区别:ui
abstract class Animal { // 抽象类用 abstract 定义
Animal();
eat(); // 抽象方法,主要用来约束子类,不能使用 abstract 定义,而是没有方法体的方式定义抽象方法
run();
printCommonFunc() {
print('我是抽象类的抽象方法');
}
}
class Dog extends Animal {
@override
eat() { // 必须得实现抽象方法
print('小狗在吃骨头');
}
@override
run() {
print('小狗在遛弯');
}
printInfo() {
print('我是小狗');
}
}
class Cat extends Animal {
@override
eat() {
print('小猫在吃猫食');
}
@override
run() {
print('小猫在散步');
}
printInfo() {
print('我是小猫咪');
}
}
void main() {
Dog d = new Dog();
d.eat();
d.run();
Cat c = new Cat();
c.eat();
c.run();
Animal animalDog = new Dog();
animalDog.eat();
animalDog.printCommonFunc();
// animalDog.printInfo(); // 报错,由于子类的实例赋值给父类的引用
Animal animalCat = new Cat();
animalCat.eat();
}
复制代码
abstract class Db { // 看成接口:规范 规定
String uri; // 数据库链接地址
add();
save();
delete();
}
class Mysql implements Db {
@override
String uri;
@override
add() {
// TODO: implement add
return null;
}
@override
delete() {
// TODO: implement delete
return null;
}
@override
save() {
// TODO: implement save
return null;
}
}
class MongoDb implements Db {
@override
String uri;
@override
add() {
// TODO: implement add
return null;
}
@override
delete() {
// TODO: implement delete
return null;
}
@override
save() {
// TODO: implement save
return null;
}
}
复制代码
abstract class A {
String name;
printA();
}
abstract class B {
printB();
}
class C implements A,B {
@override
String name;
@override
printA() {
print('printA');
}
@override
printB() {
// TODO: implement printB
return null;
}
}
void main(){
C c=new C();
c.printA();
}
复制代码
class Animal {
String name;
int age;
Animal(this.name, this.age);
funcAnimal() {
print('${this.name}--${this.age}');
}
}
class A {
String info = 'This is a attribute in A';
funcA() {
print('我是 A');
}
}
class B {
funcB() {
print('我是 B');
}
}
class C extends Animal with A, B {
C(String name, int age) : super(name, age);
funcC() {
print('我是 C 的方法');
}
}
void main() {
C c = new C('小猫', 3);
c.funcA();
c.funcB();
c.funcC();
c.funcAnimal();
print(c.info);
print(c is A); // true
print(c is Animal); // true
}
复制代码