Dart语言:类
Posted 考拉的日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dart语言:类相关的知识,希望对你有一定的参考价值。
多态
void main(){
var jack = new Student();
jack.study();
jack.run();
print(jack.name);
print(jack.isAdult);
Person lucy = new Student();
if(lucy is Student){ // 可以使用对象操作符 is 来访问子类的属性
lucy.study();
}
print('------------------');
print(lucy); //Instance of 'Student' Student的一个实例
}
class Person{
String name;
int age = 20;
String brithday;
bool get isAdult => age > 18;
void run(){
print('person run...');
}
}
extends继承
class Person{
String name;
int age = 20;
String brithday;
bool get isAdult => age > 18;
void run(){
print('person run...');
}
}
class Student extends Person{
void study(){
print('Student run...');
}
@override //@override注解:表示重写父类属性 ,可写可不写
bool get isAdult => age >15;
}
继承中的构造方法
构造方法执行顺序
void main(){
var jack = new Student('jack','哈哈');
jack.say(); // My name is jack
}
class Person{
String name;
Person(this.name); //无名称构造方法
Person.withName(this.name); //有名称构造方法
}
class Student extends Person{
int age;
final String gender; //
Student(String name, String gender): gender = gender, super(name);//调用父类无名 构造方法, 也可调用父类有名 构造方法
void say(){
print('My name is $name');
}
}
抽象类
abstract class Person{
void run(){} // 抽象方法 空实现
//void run(); // 抽象方法 无实现
}
class Student extends Person{
void run(){
print('111'); // 如果父类抽象方法是空实现 则可以重写抽象方法
// 如果父类抽象方法是无实现 则必须实现抽象方法
}
}
接口
class Person{
String name;
int get age => 16; // 计算属性
void run(){
print('Person run ...');
}
}
class Student implements Person{ // dart直接使用类名作为接口的使用 重写Person接口所有属性方法
@override
String name;
int get age => null;
void run(){
print('run...');
}
}
void main(){
var jack = new Student();
jack.run();
}
// 如果使用接口 尽量使用抽象类的形式来作为接口
abstract class Person{
void run();
}
// dart直接使用类名作为接口的使用 重写Person接口所有属性方法
class Student implements Person{
void run(){
print('student run...');
}
}
Mixins
void main(){
var d = new D();
d.a();
d.b();
d.c();
}
class A{
void a(){
print('A.a()...');
}
}
class B{
void b(){
print('B.b()...');
}
}
class C{
void c(){
print('C.c()...');
}
}
//先有extends继承 才能使用 Mixins
class D extends A with B,C{
}
void main() {
var d = new D();
d.a();
d.b();
d.c();
// 出现这个结果跟Mixins的顺序有关系
// C.a()...
// C.b()...
// C.c()...
}
class A {
void a() {
print('A.a()...');
}
}
class B {
//B(){}; //ERROR Mixins的类不能有显式构造方法
void a() {
print('B.a()...');
}
void b() {
print('B.b()...');
}
}
class Test{}
class C extends Test { //error
void a() {
print('C.a()...');
}
void b() {
print('C.b()...');
}
void c() {
print('C.c()...');
}
}
class D extends A with B, C {
//先有extends继承 才能使用 Mixins
}
void main() {
var a = new Car();
a.run(); // 轮胎...
a.work(); // Work with Electric...
}
abstract class Engine{
void work(){}
}
class OilEngine implements Engine{ //烧油的
void work(){
print('Work with oil...');
}
}
class ElectricEngine implements Engine{ //电动车
void work(){
print('Work with Electric...');
}
}
class Tyre{ // 轮胎
String name;
void run(){
print('轮胎...');
}
}
class Car = Tyre with ElectricEngine; // 简写
class Car2 extends Tyre with ElectricEngine{ // 完整写法
}
class Bus = Tyre with OilEngine;
操作符覆写
void main() {
var jack = new Person(20);
var tom = new Person(23);
print(jack > tom); // false
print(jack['age']); // 20
print(jack == tom); // false
}
class Person {
int age;
Person(this.age);
/**
* 返回类型 operator 操作符 (参数1,参数2,...){
* 实现体
* return 返回值
* }
* 如果覆写 == ,还需要复写对象的hashCode getter方法
*/
bool operator >(Person person) {
// 覆写 >
return this.age > person.age;
}
int operator [](String str) {
// 覆写 []
if ('age' == str) {
return age;
}
return 0;
}
@override
bool operator ==(Object other) => // 覆写==
identical(this, other) ||
other is Person && runtimeType == other.runtimeType && age == other.age;
@override
int get hashCode => age.hashCode;
}
以上是关于Dart语言:类的主要内容,如果未能解决你的问题,请参考以下文章