快速搭建网站工具,在什么网站上可以找设计兼职来做,wordpress path主题,西宁做网站哪家公司好Flutter 关键字详解及用法示例
一、extends#xff08;继承#xff09;
详细说明用于创建类的继承关系子类继承父类的所有公有和保护成员支持单继承#xff08;一个类只能继承一个父类#xff09;
使用场景当需要扩展现有类的功能时当多个类有共同的属性和方法时…Flutter 关键字详解及用法示例一、extends继承详细说明· 用于创建类的继承关系· 子类继承父类的所有公有和保护成员· 支持单继承一个类只能继承一个父类使用场景· 当需要扩展现有类的功能时· 当多个类有共同的属性和方法时· 实现代码复用示例代码// 父类classAnimal{Stringname;int age;Animal(this.name,this.age);voideat(){print($nameis eating);}voidsleep(){print($nameis sleeping);}}// 子类继承classCatextendsAnimal{Stringbreed;// 调用父类构造函数Cat(Stringname,int age,this.breed):super(name,age);// 重写父类方法overridevoideat(){print($name(a$breedcat) is eating fish);}// 新增方法voidmeow(){print($namesays: Meow!);}// 调用父类方法voidsleepAndEat(){super.sleep();this.eat();}}// 使用voidmain(){varcatCat(Kitty,2,Persian);cat.eat();// 输出: Kitty (a Persian cat) is eating fishcat.meow();// 输出: Kitty says: Meow!cat.sleep();// 调用父类方法}继承的层次结构// 多层继承classLivingThing{voidbreathe()print(Breathing...);}classAnimalextendsLivingThing{voidmove()print(Moving...);}classMammalextendsAnimal{voidfeedMilk()print(Feeding milk...);}classDogextendsMammal{voidbark()print(Barking...);}voidmain(){vardogDog();dog.breathe();// 来自 LivingThingdog.move();// 来自 Animaldog.feedMilk();// 来自 Mammaldog.bark();// 自己的方法}二、implements接口实现详细说明· 用于实现一个或多个接口· 必须实现接口中定义的所有公共成员属性和方法· 一个类可以实现多个接口使用场景· 定义契约/协议· 强制类实现特定功能· 多态性实现示例代码// 定义接口abstractclassVehicle{voidstart();voidstop();intgetmaxSpeed;}abstractclassElectric{voidcharge();intgetbatteryLevel;}// 实现多个接口classElectricCarimplementsVehicle,Electric{Stringmodel;int _currentSpeed0;int _battery100;ElectricCar(this.model);overridevoidstart(){print($modelstarting silently...);_currentSpeed10;}overridevoidstop(){print($modelstopping...);_currentSpeed0;}overrideintgetmaxSpeed200;overridevoidcharge(){print(Charging$model);_battery100;}overrideintgetbatteryLevel_battery;voiddisplayInfo(){print(Model:$model, Speed:$_currentSpeed, Battery:$_battery%);}}// 另一个实现classGasolineCarimplementsVehicle{Stringmodel;GasolineCar(this.model);overridevoidstart(){print($modelstarting with engine sound...);}overridevoidstop(){print($modelstopping...);}overrideintgetmaxSpeed180;}// 使用voidmain(){VehicleteslaElectricCar(Tesla Model 3);tesla.start();VehiclebmwGasolineCar(BMW X5);bmw.start();// 类型检查if(teslaisElectric){(teslaasElectric).charge();}}三、with混入详细说明· 用于将 mixin 的功能混入到类中· 可以混入多个 mixin· mixin 可以包含方法和属性实现使用场景· 代码复用特别是跨不同类层次结构的复用· 避免多重继承的问题· 实现类似功能组合的模式示例代码// 定义 mixinmixinFlyable{voidfly(){print(Flying...);}doublegetmaxAltitude10000;}mixinSwimmable{voidswim(){print(Swimming...);}doublegetmaxDepth200;}mixinWalkable{voidwalk(){print(Walking...);}doublegetspeed5;}// 基类classAnimal{Stringname;Animal(this.name);voidbreathe(){print($nameis breathing);}}// 使用 with 混入多个 mixinclassDuckextendsAnimalwithWalkable,Swimmable,Flyable{Duck(Stringname):super(name);voiddoEverything(){breathe();walk();swim();fly();print(Max altitude:$maxAltitudemeters);print(Max depth:$maxDepthmeters);}}classPenguinextendsAnimalwithWalkable,Swimmable{Penguin(Stringname):super(name);voidslide(){print($nameis sliding on ice!);}}// 使用voidmain(){varduckDuck(Donald);duck.doEverything();varpenguinPenguin(Pingu);penguin.swim();penguin.walk();penguin.slide();// Penguin 不能 fly()// 类型检查if(duckisFlyable){print(Duck can fly!);}if(penguinisFlyable){print(Penguin can fly!);// 不会执行}}四、on限制混入详细说明· 用于限制 mixin 只能被特定类型的类使用· 确保 mixin 可以安全地使用宿主类的功能使用场景· 当 mixin 需要依赖特定基类的功能时· 确保类型安全· 创建专门的工具 mixin示例代码// 基类abstractclassAnimal{Stringname;Animal(this.name);voidmakeSound();}// 使用 on 限制只能用于 Animal 的子类mixinPetFeaturesonAnimal{StringownerUnknown;voidbeCute(){print($nameis being cute for$owner);}voidplay(){makeSound();// 可以调用宿主类的方法print($nameis playing);}}// 正确的使用classDogextendsAnimalwithPetFeatures{Dog(Stringname):super(name);overridevoidmakeSound(){print($namesays: Woof!);}voidfetch(){print($nameis fetching the ball);}}// 错误的使用编译错误// class Car with PetFeatures { } // 错误Car 不是 Animal// 使用voidmain(){vardogDog(Buddy)..ownerJohn// 来自 PetFeatures..beCute()// 输出: Buddy is being cute for John..play()// 输出: Buddy says: Woof! \n Buddy is playing..fetch();}五、abstract抽象详细说明· 用于声明抽象类和抽象方法· 抽象类不能被实例化· 抽象方法没有实现必须在子类中实现使用场景· 定义接口或基类· 强制子类实现特定方法· 提供部分实现让子类完成细节示例代码// 抽象类abstractclassShape{Stringcolor;Shape(this.color);// 抽象方法 - 没有实现doublearea();// 具体方法 - 有实现voiddescribe(){print(This is a$colorshape);}// 抽象 getterStringgetshapeType;}// 实现抽象类classCircleextendsShape{double radius;Circle(Stringcolor,this.radius):super(color);overridedoublearea(){return3.14159*radius*radius;}overrideStringgetshapeTypeCircle;// 新增方法doublegetcircumference2*3.14159*radius;}classRectangleextendsShape{double width;double height;Rectangle(Stringcolor,this.width,this.height):super(color);overridedoublearea(){returnwidth*height;}overrideStringgetshapeTypeRectangle;doublegetperimeter2*(widthheight);}// 使用voidmain(){// Shape shape Shape(red); // 错误不能实例化抽象类ShapecircleCircle(red,5.0);print(${circle.shapeType}area:${circle.area()});// 输出: Circle area: 78.53975circle.describe();ShaperectangleRectangle(blue,4.0,6.0);print(${rectangle.shapeType}area:${rectangle.area()});// 输出: Rectangle area: 24.0// 类型检查ListShapeshapes[circle,rectangle];for(varshapeinshapes){print(${shape.shapeType}- Area:${shape.area()});}}六、mixin混入类详细说明· 用于定义可复用的代码片段· 类似于抽象类但不能有构造函数· 可以通过 with 关键字混入到其他类中使用场景· 创建可复用的功能模块· 实现类似多继承的效果· 跨类层次共享代码示例代码// 定义 mixinmixinLogger{voidlog(Stringmessage){print(LOG [${DateTime.now()}]:$message);}voiderror(Stringmessage){print(ERROR [${DateTime.now()}]:$message);}}mixinValidator{boolisValidEmail(Stringemail){returnRegExp(r^[\w-\.]([\w-]\.)[\w-]{2,4}$).hasMatch(email);}boolisValidPhone(Stringphone){returnRegExp(r^[0-9]{10,}$).hasMatch(phone);}}mixinCacheManager{finalMapString,dynamic_cache{};voidcache(Stringkey,dynamicvalue){_cache[key]value;}dynamicgetFromCache(Stringkey){return_cache[key];}voidclearCache(){_cache.clear();}}// 使用 mixinclassUserServicewithLogger,Validator,CacheManager{voidregisterUser(Stringemail,Stringphone){// 使用 Validator 的功能if(!isValidEmail(email)){error(Invalid email:$email);return;}if(!isValidPhone(phone)){error(Invalid phone:$phone);return;}// 使用 Logger 的功能log(Registering user:$email);// 使用 CacheManager 的功能cache(last_registered_email,email);print(User registered successfully);}voidshowLastUser(){varemailgetFromCache(last_registered_email);if(email!null){print(Last registered user:$email);}}}// 另一个类使用部分 mixinclassOrderServicewithLogger,CacheManager{voidcreateOrder(StringorderId){log(Creating order:$orderId);cache(current_order,orderId);}}// 使用voidmain(){varuserServiceUserService();userService.registerUser(testexample.com,1234567890);userService.showLastUser();varorderServiceOrderService();orderService.createOrder(ORD12345);// mixin 的实例是独立的print(userService.getFromCache(current_order));// nullprint(orderService.getFromCache(last_registered_email));// null}七、factory工厂构造函数详细说明· 用于创建灵活的构造函数· 可以返回缓存实例、子类实例或其他对象· 不一定每次调用都创建新实例使用场景· 单例模式· 缓存对象· 根据条件返回不同的子类· 对象池模式示例代码// 1. 单例模式classSingleton{staticSingleton?_instance;// 私有构造函数Singleton._internal(){print(Singleton created);}// 工厂构造函数factorySingleton(){_instance??Singleton._internal();return_instance!;}voiddoSomething(){print(Doing something...);}}// 2. 缓存实例classConnection{finalStringhost;finalint port;staticfinalMapString,Connection_cache{};// 私有构造函数Connection._(this.host,this.port);// 工厂构造函数factoryConnection(Stringhost,int port){Stringkey$host:$port;if(_cache.containsKey(key)){print(Returning cached connection);return_cache[key]!;}else{print(Creating new connection);finalconnectionConnection._(host,port);_cache[key]connection;returnconnection;}}voidconnect(){print(Connected to$host:$port);}}// 3. 返回子类实例abstractclassAnimal{Stringname;Animal(this.name);voidmakeSound();// 工厂构造函数factoryAnimal.create(Stringtype,Stringname){switch(type.toLowerCase()){casedog:returnDog(name);casecat:returnCat(name);casebird:returnBird(name);default:throwArgumentError(Unknown animal type:$type);}}}classDogimplementsAnimal{overrideStringname;Dog(this.name);overridevoidmakeSound(){print($namesays: Woof!);}}classCatimplementsAnimal{overrideStringname;Cat(this.name);overridevoidmakeSound(){print($namesays: Meow!);}}classBirdimplementsAnimal{overrideStringname;Bird(this.name);overridevoidmakeSound(){print($namesays: Tweet!);}}// 4. 从 JSON 创建对象classUser{finalStringid;finalStringname;finalint age;User(this.id,this.name,this.age);// 工厂构造函数factoryUser.fromJson(MapString,dynamicjson){returnUser(json[id]??,json[name]??Unknown,json[age]??0,);}// 命名构造函数对比User.fromMap(MapString,dynamicmap):idmap[id]??,namemap[name]??Unknown,agemap[age]??0;overrideStringtoString()User(id:$id, name:$name, age:$age);}// 使用voidmain(){// 1. 单例模式print( Singleton Example );vars1Singleton();vars2Singleton();print(s1 and s2 are same instance:${identical(s1,s2)});s1.doSomething();// 2. 缓存实例print(\n Connection Cache Example );varconn1Connection(localhost,8080);varconn2Connection(localhost,8080);varconn3Connection(example.com,443);print(conn1 and conn2 are same:${identical(conn1,conn2)});print(conn1 and conn3 are same:${identical(conn1,conn3)});// 3. 返回子类实例print(\n Animal Factory Example );AnimaldogAnimal.create(dog,Buddy);AnimalcatAnimal.create(cat,Whiskers);AnimalbirdAnimal.create(bird,Tweety);dog.makeSound();cat.makeSound();bird.makeSound();// 4. JSON 反序列化print(\n JSON Factory Example );varjson{id:123,name:Alice,age:30};varuser1User.fromJson(json);varuser2User.fromMap(json);print(Factory constructor:$user1);print(Named constructor:$user2);}八、综合示例// 综合使用所有关键字abstractclassAnimal{Stringname;Animal(this.name);voidmakeSound();voidsleep(){print($nameis sleeping);}}mixinFlyableonAnimal{voidfly(){print($nameis flying);}}mixinSwimmable{voidswim(){print(Swimming);}}classBirdextendsAnimalwithFlyable{double wingspan;Bird(Stringname,this.wingspan):super(name);overridevoidmakeSound(){print($namesays: Tweet!);}// 工厂构造函数factoryBird.create(Stringtype,Stringname){switch(type){caseeagle:returnEagle(name);casepenguin:returnPenguin(name);default:returnBird(name,0.5);}}}classEagleextendsBird{Eagle(Stringname):super(name,2.0);overridevoidmakeSound(){print($namesays: Screech!);}}classPenguinextendsBirdwithSwimmable{Penguin(Stringname):super(name,0.3);overridevoidmakeSound(){print($namesays: Honk!);}}voidmain(){// 使用工厂构造函数Birdbird1Bird.create(eagle,Eddie);Birdbird2Bird.create(penguin,Pingu);bird1.makeSound();bird1.fly();bird2.makeSound();// bird2.fly(); // Penguin 没有 with Flyableif(bird2isSwimmable){(bird2asSwimmable).swim();}// 多态ListAnimalanimals[bird1,bird2];for(varanimalinanimals){animal.makeSound();animal.sleep();}}总结对比关键字 用途 是否强制实现 数量限制 实例化extends 类继承 可选重写 单继承 可实例化子类implements 接口实现 必须全部实现 多实现 可实例化实现类with 混入功能 可选使用 多混入 可实例化on 限制混入 - - -abstract 定义抽象 抽象方法必须实现 - 不能实例化mixin 定义混入类 - - 不能单独实例化factory 工厂构造 - - 返回实例这些关键字共同构成了 Dart/Flutter 强大的面向对象和代码复用机制。