首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在dart中使用抽象类执行继承?错误:超类SpanishData没有零参数构造函数

在Dart中,使用抽象类执行继承的方法如下:

  1. 首先,定义一个抽象类,使用abstract关键字标识。抽象类不能被实例化,只能被继承。
代码语言:txt
复制
abstract class Language {
  void speak();
}
  1. 创建一个具体的类,并继承自抽象类。在子类中,必须实现抽象类中声明的所有抽象方法。
代码语言:txt
复制
class SpanishData extends Language {
  @override
  void speak() {
    print('Hola!'); // 实现抽象方法
  }
}
  1. 在其他地方使用子类。
代码语言:txt
复制
void main() {
  SpanishData spanish = SpanishData();
  spanish.speak(); // 输出 "Hola!"
}

在上述代码中,Language是一个抽象类,它声明了一个抽象方法speak()SpanishData是一个具体的类,它继承自Language并实现了speak()方法。在main()函数中,我们创建了一个SpanishData的实例,并调用了speak()方法。

关于错误信息"超类SpanishData没有零参数构造函数",这是因为在Dart中,如果一个类没有显式定义构造函数,那么它会默认拥有一个无参数的构造函数。但是,当一个类继承自一个抽象类时,它必须显式地调用父类的构造函数。如果父类没有无参数的构造函数,那么子类必须通过调用父类的有参数构造函数来初始化父类的实例。所以,你需要在SpanishData类中添加一个构造函数来调用父类的构造函数。

代码语言:txt
复制
class SpanishData extends Language {
  SpanishData() : super(); // 调用父类的构造函数

  @override
  void speak() {
    print('Hola!');
  }
}

这样,你就可以在Dart中使用抽象类执行继承了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Dart的语法详解系列篇(二)-- 函数八、Dart函数

默认构造函数没有参数,并在调用无参数构造函数。 如果定义了空参构造,再去写实参构造,会报错(这一点和java不一样)。...class Test{ // 如果不写 默认就是空参构造 Test(){} } 4.构造函数不是继承的 子类不从其继承构造函数。声明没有构造函数的子类只有默认(无参数,无名称)构造函数。...{y}'); } } 构造函数不是继承的,也就是说的命名构造函数不会被子类继承。如果希望使用定义的命名构造函数创建子类,则必须在子类实现该构造函数。...{y}'); // } } 6.构造函数调用流程 默认情况下,子类构造函数调用的无参构造函数构造函数构造函数体的开头被调用。如果 还使用初始化列表,则在调用之前执行。...执行顺序如下: 初始化列表 -> 的无参数构造函数 -> 主的无参数构造函数 必须要有一个空参构造,如果没有未命名的无参数构造函数,则必须手动调用的一个构造函数

2.9K30

Dart语言指南(二) 顶

Point(this.x, this.y); } 默认构造函数 如果您没有声明构造函数,则会为您提供默认构造函数。 默认构造函数没有参数,并调用父的无参数构造函数。....构造函数不能继承 子类不会从他们的继承构造函数.声明没有构造函数的子类只有默认(无参数,无名称)构造函数....如果要使用定义的命名构造函数创建子类,则必须在子类实现该构造函数. 调用父的非默认构造函数 默认情况下,子类构造函数调用的未命名的无参数构造函数。...构造函数构造函数体的起始处被调用。 如果一个 初始化器列表 也被使用,它将在被调用之前执行。...总而言之,执行顺序如下: 初始化程序列表 父的无参构造的无参构造 如果没有未命名的无参数构造函数,则必须手动调用的一个构造函数

3.1K20
  • # 泛型

    dart定义mixin可以通过on关键字来限定使用范围 //定义一个有活的的动物,通过on限制只允许继承Anmial的子类才可以使用Living mixin Living on Anmial{...# 面向对象(抽象类,接口,getter/setter访问器) # 抽象类dart使用abstract修饰class来定义抽象类,抽象方法为抽象类无方法体的方法定义,使用extends来继承抽象方法...hello () { } } # 接口 ​ dart只存在隐式接口,即通过implements引入的或者抽象类都可作为接口,dart要求子类必须实现接口中定义的除构造函数之外的任意成员变量。...extends TestA{ //因为TestA没有默认构造函数,所以必须至少实现父的一个构造函数 Test1.noArg():super.noArg(); } 构造函数无法被子类继承...工厂构造函数类似设计模式的工厂方法,但不能使用this关键字有点类似静态方法的限制(实际就是dart的语法糖)。 需要使用factory来定义工厂构造函数

    76310

    Flutter 入门指北之 Dart

    Classes Dart 都是单继承,但是同时支持 mixin 的继承机制(除 Object ,每个都只有一个),所有的继承于 Object,通过调用 runtimeType 判断实例的类型...默认构造函数没有参数,并且会调用没有参数构造函数。子类不会继承构造函数,子类如果没有定义构造函数,则只有一个默认构造函数。...json){ this.x = json['x']; this.y = json['y']; } // 因为构造函数不能继承,如果希望子类也有一样的命名构造函数,必须在子类实现该构造函数...// 构造函数执行之前除了可以调用构造函数之外,还可以初始化实例参数 // 初始化列表非常适合用来设置 final 变量的值 Size.fromJsonInit(Map json..., 并且这个实现了这个接口,通过抽象类实现类似 Java 接口的功能。

    85150

    Dart学习笔记

    void main(){} 构造函数 Dart可以被继承(extends),也可以被实现(implements) Dart也提供复杂结构类型的定义语法,通过class关键字 成员定义语法为...Dart使用abstract class定义抽象类 抽象类可以定义没有方法体的抽象方法 抽象类不能被实例化 abstract class Study { void study(); } 继承与实现.../ 抽象类 Dart通过extends关键字进行继承Dart允许通过mixin实现伪多继承 继承构造 子类构造函数默认继承构造函数(隐式调用) 通过在子类构造函数形参列表后使用:可以修改要使用的父构造函数...Dart提出mixin多继承,通过with关键字关联多个 / 抽象类 进行mixin继承 mixin继承解决多继承同名同类型成员冲突的规则是,如果当前,包含该同名同类型成员,则使用当前成员,否则使用离...) finally可以没有,即便在try或者catch调用return,finally也会在方法返回前执行 void doSth() => throw Exception("error!")

    1.1K30

    一篇文章学习Dart,为使用Flutter打基础

    似有变量就是只能在自己的使用,在被引入的文件是不可以被调用的,共有的变量就是,可以在自身中被调用意外,还可以在被引入的时候调用,构造函数是在该类被初始化的时候就开始进行执行函数,这里为什么将封装也写到这里了呢...; a.sex; a.execFun(); } 继承 通过extends进行实现,继承以后,子类拥有了父的方法和属性,但是需要注意的是如果父拥有构造函数的话,子类继承的父的时候需要将构造函数实现掉...没有interface关键字,我们一般使用进行定义接口,常规的写法是使用抽象类进行接口的定义,通过implates进行实现,接口就是约定一些的规范和方法,这里的接口可能和对java有深刻认知的人有点出入...,java定义接口是使用interface关键字进行定义一个的,但是dart使用抽象类进行定义接口,当然你也可以使用普通的进行定义接口 abstract class Db { String...作为被mixins的,不可以是继承,也就是说如果他已经继承类别的,那么他就不可以被mixins了 被minxin的不可以有构造函数,如果有多个同样的方法的时候,with后面的函数会最后被执行

    76650

    flutter--Dart基础语法(三)和对象、泛型、库

    Dart继承使用extends关键字,子类中使用super来访问父。父的所有成员变量和方法都会被继承,但是构造方法除外。...,对某些属性进行初始化: 子类的构造方法在执行前,将隐含调用父的无参默认构造方法(没有参数且与类同名的构造方法)。...在Dart没有具体实现的方法(没有方法体),就是抽象方法。 抽象方法,必须存在于抽象类抽象类使用abstract声明的。...注意二:抽象类的抽象方法必须被子类实现, 抽象类的已经被实现方法, 可以不被子类重写. 2.6 隐式接口 Dart的接口比较特殊, 没有一个专门的关键字来声明接口。...类型会导致错误: var foo = Foo(); 4.4 使用泛型函数 最初,Dart 的泛型只能用于

    3.8K70

    Dart学习笔记(四)

    子类可以继承的共有属性和方法,但是不能继承构造函数。 如果父实现了默认的构造函数,那么我们需要在子类也实现构造函数来给父构造函数传值。...,通过子类的构造函数,将参数值传给父构造函数super(name, age)。...抽象类主要用于定义标准,不可使用抽象类直接生成实例,只有继承抽象类的子类才可以实例化对象。...但是在Dart,是没有interface关键字来定义接口的,dart里的普通或者抽象类都可以作为接口被实现。...在Dart,我们使用implements关键字来实现使用抽象类来封装的接口,并且一个可以实现多个接口,如下: //封装接口的抽象类 abstract class Animal{ String name

    84630

    Flutter必备语言Dart教程03 - ,泛型

    添加实例变量,以及构造函数。 ? Dart提供了一种构造函数初始化的简洁语法。如下所示: ? 您所见,我们编写了一行构造函数,第一个参数值将设置为name,第二个参数值将设置为age。...命名的构造函数 Dart提供了另一种定义构造函数的方法,称为命名构造函数。 ? 您所见,我们为构造函数提供了一个名称。这样我们在调用不同构造函数时,语义会更加清晰明了,不用根据参数去判断了。...继承 您可以使用extend关键字在Dart继承其他。 ? 这里我们的Pug继承自Dog,并使用super关键字,传入适当的参数,调用Dog构造函数。...这里我们创建两个命名构造函数,它们只有name参数,并调用默认的Pug构造函数。 方法 的方法与Dart定义普通方法类似。 ? 覆盖方法也很简单。 ?...抽象类和方法 您可以使用abstract关键字,在Dart创建一个抽象类。 ? 您只需要在声明之前提供abstract关键字。对于方法,只需提供签名并省略实现。

    1.3K10

    『Flutter开发实战』一小时掌握Dart语言

    基于 mixin 的继承 意味着尽管每个(Object 除外)都只有一个,一个的代码可以在其它多个继承重复使用。...Point(this.x, this.y); } 默认构造函数 如果你没有声明构造函数,那么 Dart 会自动生成一个无参数构造函数并且该构造函数会调用其父的无参数构造方法。...构造函数不被继承 子类不会继承构造函数,如果子类没有声明构造函数,那么只会有一个默认无参数构造函数。...,总的来说,这三者的调用顺序如下: 初始化列表 父的无参数构造函数 当前构造函数 如果父没有匿名无参数构造函数,那么子类必须调用父的其中一个构造函数,为子类的构造函数指定一个父构造函数只需在构造函数体前使用...重定向构造函数 有时候构造函数仅用于调用其它的构造函数,此时该构造函数没有函数体,只需在函数签名后使用(:)指定需要重定向到的其它构造函数: class Point { double x,

    5.1K10

    《深入浅出Dart》面向对象之多态

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 多态 多态是面向对象编程的三大特性之一(封装、继承和多态)。在 Dart ,多态表现为父引用指向子类对象。...在上述例子,feedAnimal 函数接受一个 Animal 类型的参数,然而在运行时,这个参数可以是任何一个 Animal 的子类的实例。这就是多态的体现。...抽象类Dart 抽象类是一种特殊的,它不能被实例化。抽象类用于定义一些基本的结构,而具体的实现则由继承抽象类的子类来完成。抽象类使用 abstract 关键字来定义。...接口 Dart 没有专门的接口关键字,可以作为接口被其他实现。实现接口需要使用 implements 关键字。...实际上,Dart 面向对象的特性还有很多,例如工厂构造函数、静态成员、Mixins 等。这些内容需要我们在日常的学习和实践不断深入理解和掌握。

    17720

    Flutter Lesson 2: Dart 语法简单介绍

    这个需要注意,这个和JavaScript的变量还是有很大的差别的 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推断变量类型 Dart支持顶层方法(main方法),也支持方法或对象方法...class构建一个的同时,在定义一个与名字相同的方法就定义了一个构造函数,如上面的Point的Point方法。...,只有一个命名构造方法 fromJson ,所以在Man继承Human时,需要调用父的fromJson方法做初始化,而且必须使用Man.fromJson(Map data) : super.fromJson...(data)这种写法 重定向构造函数 有时候一个构造函数会调动的其他构造函数。...一个重定向构造函数没有代码的,在构造函数声明后,使用 冒号 调用其他构造函数

    1.8K20

    Java——抽象类与接口的前世今生

    4、当使用static修饰一个方法时,表明这个方法属于该类本身,即通过就可调用该方法,但如果该方法被定义成抽象方法,则将导致通过该类来调用该方法时出现错误(调用了一个没有方法体的方法肯定会引起错误)。...可以有,抽象类可以声明并定义构造函数。因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现。...现在一些面试官问,如果你不能对抽象类实例化那么构造函数的作用是什么?好吧,它可以用来初始化抽象类内部声明的通用变量,并被各种实现使用。...另外,即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数构造函数没有的话你的子类将无法编译,因为在任何构造函数的第一条语句隐式调用super(),Java默认构造函数。 2....Java抽象类可以包含main方法吗? 是的,抽象类可以包含main方法,它只是一个静态方法,你可以使用main方法执行抽象类,但不可以创建任何实例。

    81520
    领券