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

Dart -子类是否隐式继承常量构造函数?

Dart是一种面向对象的编程语言,由Google开发,用于构建高性能、跨平台的移动、Web和桌面应用程序。在Dart中,子类不会隐式继承父类的常量构造函数。

常量构造函数是指在Dart中使用const关键字声明的构造函数。它们用于创建不可变的对象,这些对象在编译时就确定了其值。常量构造函数在创建对象时只能使用常量表达式作为参数,并且它们的参数和实例变量必须是不可变的。

当我们创建一个子类时,它不会自动继承父类的常量构造函数。如果我们想在子类中使用父类的常量构造函数,我们需要显式地调用父类的构造函数,并传递必要的参数。这可以通过在子类的构造函数中使用super关键字来实现。

以下是一个示例代码,展示了子类如何显式调用父类的常量构造函数:

代码语言:txt
复制
class Parent {
  final int value;

  const Parent(this.value);
}

class Child extends Parent {
  final String name;

  const Child(int value, this.name) : super(value);
}

void main() {
  const child = Child(10, 'John');
  print(child.value); // 输出:10
  print(child.name); // 输出:John
}

在上面的示例中,Parent类有一个常量构造函数,接受一个value参数。Child类继承自Parent类,并在其常量构造函数中调用了父类的构造函数,同时还有一个额外的name参数。

总结一下,Dart中的子类不会隐式继承父类的常量构造函数。如果我们想在子类中使用父类的常量构造函数,需要显式地调用父类的构造函数,并传递必要的参数。

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

相关·内容

构造函数转换_构造函数实例化对象

转载博客: http://blog.csdn.net/thefutureisour/article/details/7705771 构造函数转换 构造函数会引起一个不引人注意的问题: 用单个实参来调用的构造函数定义了从从形参类型到类类型的一个转换...); 这是因为Sales_item的构造函数可以是带单个实参的(也可以不带实参,因为我定义了默认实参7115145547),这时在调用trans1.same_isbn(null_book);时,就会发生类型转化...为了避免这个情况的发生,可以将类的构造函数声明为explicit: explicit Sales_item(const std::string &book = "7115145547"):isbn(book...所以对于单形参构造函数,除非有非常明显的理由让他发生类型转换,否者我们应该把它设计为explicit,防止转化的发生。...当然我们总可以为转化而显示的使用构造函数: trans1.same_isbn(Sales_item(null_book)); 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

37730

【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类构造函数 | 子类构造函数 )

继承基本方式 II . 使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数子类构造函数总结 I ....类继承格式 : 使用 " : " 继承父类 ; 如果该父类有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类构造函数下面会根据不同情况详细解析 ; //注意这里的父类构造函数需要实际调用...类继承限制 : 子类使用 : 父类 ( 父类构造函数参数列表 ) ① 类继承限制 : 只有被 open 修饰的类 , 才能有子类继承该类 , 普通的类不允许被继承 ; ② 类方法被重写限制 : 只有被...父类构造函数子类构造函数总结 ---- 子类构造函数最终委托 : 子类构造函数归根到底都要委托给父类的主构造函数 ; ① 子类构造函数 : 假如子类有主构造函数 , 该主构造函数肯定要委托父类的主构造函数执行...; ② 子类构造函数 : 此时子类的次构造函数都要委托子类的主构造函数执行 , 相当于间接委托父类主构造函数执行 ;

1.2K10

java之父类中的构造是否能被子类继承

子类默认继承父类的属性和方法,但不会继承父类的构造器,而是在子类被实例化时会默认调用父类的空构造器。子类在创建的时候会调用自己的空构造器,并在空构造器会调用super(),即父类的空构造器。...如果父类的构造器被重载,那么子类中的构造器也必须初始化父类的构造器,否则会报编译错误。当然,只要父类中显示定义了空构造器,子类中就不必初始化父类的构造器。...return this.age; } public Person(String name) { this.name = name; } } 子类...:Student.java package myjava; public class Student extends Person{ //这里必须初始化父类重载后的构造方法,否则会报错...,只有一个重载了的构造器,在子类构造器中,必须初始化父类的构造器,即super关键字+父类构造器中的参数。

1.2K20

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

非final实例变量也会生成setter方法。...class Test{ // 如果不写 默认就是空参构造 Test(){} } 4.构造函数不是继承子类不从其超类继承构造函数。声明没有构造函数子类只有默认(无参数,无名称)构造函数。...{y}'); } } 构造函数不是继承的,也就是说超类的命名构造函数不会被子类继承。如果希望使用超类中定义的命名构造函数创建子类,则必须在子类中实现该构造函数。...所有实例变量都生成一个getter方法。非final实例变量也会生成setter方法。使用get和set关键字通过实现getter和setter来创建其他属性。...test(); } (十)接口 每个类都定义一个接口,该接口包含该类的所有实例成员及其实现的任何接口。

2.8K30

C++ explicit禁止单参数构造函数调用

1.单参数构造函数调用 C++中单参数构造函数是可以被调用的,主要有两种情形会调用单参数构造函数: (1)同类型对象的拷贝构造;即用相同类型的其它对象来初始化当前对象。...(2)不同类型对象的转换。即其它类型对象调用单参数拷贝构造函数初始化当前对象。比如A a=1;就是转换,而不是显示调用构造函数,即A a(1);。...; 这种单参数构造函数调用在C++中是被默许的,但是这种写法很明显会影响代码的可读性,有时甚至会导致程序出现意外的错误。...2.单参数构造函数调用的危害 单参数构造函数调用不仅仅会给代码可读性造成影响,有时会带来意外的结果。...3.explicit禁止单参数构造函数调用 在没有合适理由必须使用转换的前提下,为了提高代码可读性以及避免单参数构造函数调用带来的潜在风险,建议使用explicit关键字阻止单参数构造函数调用

4.6K60

Dart语言进阶语法(二)

类和对象 类的定义 Getters 和 Setters方法 构造方法 命名构造方法 常量构造方法 工厂构造方法 构造方法重定向 类的初始化列表 运算符重载 类的继承 接口抽象 抽象类 接口 泛型 异常处理...而在Dart语言中,所有类中都包含的getter方法,对于非final修饰的成员,类中还包含的setter方法。这就意味着,在Dart中,你可以直接在类外部通过.操作符访问类成员。...常量构造方法 如果想提供一个状态永远不变的对像,在Dart中,我们可以创建一个编译时常量对象,节省开销。...abstract class Base { // 省略函数体即可定义抽象方法,不需加关键字 func1(); func2(); } 注意,抽象类是不能被实例化的,子类继承抽象类时...接口 实际上在Dart中,每个类都的定义了一个包含所有实例成员的接口, 并且该类实现了这个接口。 因此,如果我们想实现某个接口,但又不想继承,则可以使用这种接口机制。

1.6K20

Dart语言指南(二) 顶

所有实例变量都生成一个的 getter 方法. 非最终实例变量也生成一个 setter 方法....构造函数不能继承 子类不会从他们的超类继承构造函数.声明没有构造函数子类只有默认(无参数,无名称)构造函数....constructor Point.fromJson(Map json) { x = json['x']; y = json['y']; } } 请记住,构造函数不是继承的,这意味着父类的命名构造函数不会被子类继承...如果要使用父类中定义的命名构造函数创建子类,则必须在子类中实现该构造函数. 调用父类的非默认构造函数 默认情况下,子类中的构造函数调用超类的未命名的无参数构造函数。...void doSomething(); } 接口 每个类定义一个包含类的所有实例成员以及它实现的任何接口的接口。 如果要创建一个支持B类API而不继承B实现的A类,则A类应实现B接口.

3K20

【C++】构造函数意义 ( 构造函数显式调用与调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

类的 实例对象时 , C++ 编译器 会自动调用 开发者定义的 构造函数 ; 2、构造函数显式调用与调用 类 的 构造函数 可以 自动调用 , 也可以手动调用 ; 一般 默认的 无参构造函数 是 自动地...调用 ; 有参构造函数 是 由开发者 手动显调用 ; 3、构造函数替代方案 - 初始化函数 构造函数的替代方案 - 初始化函数 : 共有初始化函数 : 为每个类定义一个 public 共有初始化函数..., 并且是 显调用 , 操作起来比较繁琐 ; 操作遗漏 : 使用 初始化函数 对 实例对象 进行初始化操作 , 不能有遗漏 , 如果 实例对象 没有进行初始化 , 其中的成员变量值 是随机值 , 不确定..., 则无法进行初始化操作 ; 5、默认构造函数 如果 定义 类 时 , 没有写 构造函数 , C++ 编译器 会 为类 提供一个默认构造函数 ; 默认构造函数函数体为空 , 不需要开发者定义 ,...由 C++ 编译器默认提供 ; 默认构造函数 分为 2 种类型 : 默认无参构造函数 : 如果 类 中没有定义 构造函数 , C++ 编译器 会默认提供一个 无参构造函数 , 该构造函数函数体为空

54420

C++拾趣——类构造函数转换

首先我们看下一种比较常见的技术——类构造函数转换。这儿先说明下,之后的例子中,我会为了尽量突出主要内容,而忽略一些可以作为充分条件但非必要条件的东西,故设计的一些代码存在“不完善”的嫌疑。...这便是类构造函数转换技术。...稍微总结下类构造函数转换的必要条件: 找不到传参类型严格对应的函数 找到传参类型严格匹配的类的构造函数 因为转换构造出的是临时对象,所以不可修改,故触发转换的函数的传参类型必须要使用const...限制类构造函数转换的方法也很简单,就是给对应的构造函数加上explict关键字 class int_proxy { public: explicit int_proxy(int n) :..._m(n) {};         这样通过转换而构造临时对象的图谋将会被察觉并禁止。

67820

Flutter 入门指北之 Dart

Classes Dart 中的类都是单继承,但是同时支持 mixin 的继承机制(除 Object 类,每个类都只有一个超类),所有的类都继承于 Object,通过调用 runtimeType 判断实例的类型...默认构造函数没有参数,并且会调用超类的 没有参数的构造函数子类不会继承超类的构造函数子类如果没有定义构造函数,则只有一个默认构造函数。...json){ this.x = json['x']; this.y = json['y']; } // 因为构造函数不能继承,如果希望子类也有超类一样的命名构造函数,必须在子类中实现该构造函数...) : this.x = json['x'], this.y = json['y']; } 常量构造函数(如果类需要提供一个状态不变的对象,通过 const 构造函数实现)...instance; static HttpCore get instance => HttpCore(); void _request(){ //... } } 每个类都的定义了一个包含所有实例成员的接口

83250

Dart学习笔记

变量定义 Dart中,不像其他语言存在基本类型与类类型,Dart中所有类型(包括int等)都是继承自Object的类型 字符串字符为UTF16编码,小数都为double类型,函数类型为Function,...const表示编译器常量,在编译前必须指定好初始值。...void main(){} 类与构造函数 Dart的类可以被继承(extends),也可以被实现(implements) Dart也提供复杂结构类型的定义语法,通过class关键字 类中成员定义语法为...[static] type variable,被static修饰成员代表静态成员,是共享变量 类除了可以使用默认的同名无返回值函数作为构造函数,还可以定义 类名.xyzxxx格式的无返回值函数作为构造函数...关键字进行继承Dart允许通过mixin实现伪多继承 继承构造 子类构造函数默认继承父类构造函数调用) 通过在子类构造函数形参列表后使用:可以修改要使用的父类构造函数,比如 class

1K30

深入理解javascript中的继承机制(4)多继承寄生继承借用构造函数借用构造函数并且复制原型以上

getArea: function () { return this.side * this.height / 2; }, side: 5, height: 10 }); 下面我们就在控制台测试一下,多继承函数是否起作用...首先将已有的对象作为新对象的原型,继承它的属性,我们调用了之前的objec函数 然后再给他添加其他属性与方法 借用构造函数 这种继承模式中,就是子对象的构造函数中调用父对象的构造函数,通过apply和...这样的话,triangle对象会继承Shape构造函数中的属性,但不会继承原型中的属性。...(); Triangle.prototype.name = 'Triangle'; 但这样有一个缺点,我们通过调用父类的构造函数继承了父类的自身属性,通过原型继承了父类的自身属性和原型,这样自身属性实际上就被覆盖了两次...下面这个模式就可以更好的解决这个问题 借用构造函数并且复制原型 其实解决上面那个自身属性被继承两次的问题也很简单,我们首先调用apply函数继承父类的自身属性,然后在复制原型属性就可以了,这个方法我们之前已经讨论过就是

66410

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

构造函数不被继承 子类不会继承父类的构造函数,如果子类没有声明构造函数,那么只会有一个默认无参数的构造函数。...Point.origin() : x = 0, y = 0; } 记住构造函数是不能被继承的,这将意味着子类不能继承父类的命名构造函数,如果你想在子类中提供一个与父类命名构造函数名字一样的命名构造函数...调用父类非默认构造函数 默认情况下,子类构造函数会调用父类的匿名无参数构造方法,并且该调用会在子类构造函数函数体代码执行前,如果子类构造函数还有一个 初始化列表,那么该初始化列表会在调用父类的该构造函数之前被执行...} 接口 每一个类都地定义了一个接口并实现了该接口,这个接口包含所有这个类的实例成员以及这个类所实现的其它接口。...Dart地将 loadLibrary 方法导入到使用了 deferred as 命名空间 的类中。loadLibrary 函数返回的是一个 Future。

4.9K10

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

Dart语言中构造方法分为普通构造方法、命名构造方法、重定向构造方法、常量构造方法、工厂构造方法以及初始化列表等多种。...Dart中的继承使用extends关键字,子类中使用super来访问父类。父类中的所有成员变量和方法都会被继承,但是构造方法除外。...如果父类没有无参默认构造方法,则子类构造方法必须在初始化列表中通过super显调用父类的某个构造方法。...注意二:抽象类中的抽象方法必须被子类实现, 抽象类中的已经被实现方法, 可以不被子类重写. 2.6 接口 Dart中的接口比较特殊, 没有一个专门的关键字来声明接口。...使用继承吗?但是Dart只支持单继承,那么意味着你只能复用一个类的实现。

3.6K70

Flutter-从入门到项目 05:Dart语法快速掌握(下)

类定义中所有的变量, Dart语言都会的定义 setter 方法,针对非空的变量会额外增加 getter 方法。...默认构造函数没有参数,它将调用父类的无参数构造函数。: LGStudent () 子类继承父类的构造函数子类只有默认构造函数。(无参数,没有名字的构造函数)。...例如,工厂构造函数可能从缓存返回实例,或者它可能返回子类型的实例。...12.6 接口 每个类的定义了一个接口,含有类的所有实例和它实现的所有接口。如果你想创建一个支持类 B 的 API 的类 A,但又不想继承类 B ,那么,类 A 应该实现类 B 的接口。...例如: // 接口 // 一个 KCPerson ,包含 greet() 的接口。 class KCPerson { // 在这个接口中,只有库中可见。

1.3K20

Dart语法基础系列七《类》

dart 的类与其他语言差别不是很大,但是也有出入。 类属性 ---- 类里直接写属性是报错的,必须有默认值初始化或者构造函数赋值。...常量构造函数 如果该类生成的对象是固定不变的, 那么就可以把这些对象定义为编译时常量。 为此,需要定义一个 const 构造函数, 并且声明所有实例变量为 final。...回想之前的例子,每个实例变量都有一个 Getter ,通常情况下还会有一个 Setter 。 使用 get 和 set 关键字实现 Getter 和 Setter ,能够为实例创建额外的属性。...---- dart类肯定也是可以继承的,和其他语言一样。...下面一个例子可以讲明白继承的一些应用: 方法的重写 super 调用父类 多态(父类指针指向子类,但是还是子类实例) class Person { final String name; run

33810
领券