静态方法没法访问非静态(成员)方法与属性。
非静态方法可以访问静态方法与属性。
类可以理解为一个代码块,类具有封装、继承、多态的特性
如何创建对象,
什么是抽象类,抽象类用于定义标准
abstrct class Animal{
eat()
}
class Dog extends Animal{
@override
eat(){
print("小狗再吃骨头")
}
}
flutter中的StatefulWidget和StatelessWidget都是抽象类,组件在使用时都使用@override实现抽象方法。
抽象类不能被实例化,抽象类中不只有抽象方法还可以有普通方法;
多态:
多态就是父类定义方法不去实现,子类去实现,子类有不同的表现。向上转型子类的实例复制给父类的引用。
dart中没有interface,就是类或者抽象类,在dart中定义接口建议使用抽象类
接口就是约定,规范。
abstrct class Db{
add();
save();
delete();
String uri;
}
class Mysql implament Db{
//实现上慢接口成员。
@veriride
add(){}
@overrider
String url;
}
接口与抽象类的区别。
何时用抽象类何时用接口,如果想共用抽象类中的公共方法就用抽象类,否则用接口;
代码演示:
abstract class Db{
add();
void eat(){
print("eat");
}
}
class Mysql extends Db{
@override
void add(){
print("add");
}
}
main() {
Mysql mysql = Mysql();
mysql.eat();
}
abstract class Db{
add();
void eat(){
print("eat");
}
}
class Mysql implements Db{
@override
void add(){
print("add");
}
}
main() {
Mysql mysql = Mysql();
mysql.eat();
}
类可以实现多个接口,但是类不能同时继承多个抽象类。
super的使用:
class Db{
void eat(){
print("eat");
}
Db(String n){
print(n);
}
}
class Mysql extends Db{
String b;
Mysql(String b,String a):super(a){
this.b = b;
}
}
main() {
Mysql mysql = Mysql("你好啊 啊啊啊","哦哦哦哦哦哦");
}
super的使用2
class Db{
void eat(){
print("eat");
}
Db(String n){
print(n);
}
}
class Mysql extends Db{
String b;
Mysql(this.b):super(a);
}
main() {
Mysql mysql = Mysql("你好啊 啊啊啊","哦哦哦哦哦哦");
}
class Db{
void eat(){
print("eat");
}
Db(String n){
print(n);
}
}
class Mysql extends Db{
String b;
String a;
Mysql(this.b,this.a):super(a);
}
main() {
Mysql mysql = Mysql("你好啊 啊啊啊","哦哦哦哦哦哦");
}
mixin类似多继承。但不是继承。可以继承共用方法
总结一下:
1.一般来讲,单继承,多实现,混入是多继承 A.继承是子类需要复用父类的方法实现 B.实现接口是复用接口的参数,返回值,和方法名,但不复用方法的实现,在Dart中实现抽象类 更像在java中实现用interface修饰的接口 C.混入是多继承,当被混入的类有多个同名方法时,调用子类的该方法时,会调用with声明的最后一个拥有该方法的类中的该方法,同时混入中的父类不能继承
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。