class Foo {
Foo(int a, int b) {
//Code of constructor
}
Foo.named(int c, int d) {
//Code of named constructor
}
}
class Bar extends Foo {
Bar(int a, int b) : super(a, b);
}
class Baz extends Foo {
Baz(int c, int d) : super.named(c, d);
Baz.named(int c, int d) : super.named(c, d);
}
如果你想初始化子类中的示例变量,super()调用必须在初始化器列表的最后。
class CBar extends Foo {
int c;
CBar(int a, int b, int cParam) :
c = cParam,
super(a, b);
}
class AppException implements Exception {
final _message;
final _prefix;
//constructor with optional & not named paramters
//if not the parameter is not sent, it'll be null
AppException([this._message, this._prefix]);
String toString() {
return "$_prefix$_message";
}
}
class FetchDataException extends AppException {
//redirecting constructor with a colon to call parent two optional parameters
FetchDataException([String msg]) : super(msg, "Error During Communication: ");
}
class BadRequestException extends AppException {
BadRequestException([msg]) : super(msg, "Invalid Request: ");
}
class UnauthorisedException extends AppException {
UnauthorisedException([msg]) : super(msg, "Unauthorised: ");
}
class InvalidInputException extends AppException {
InvalidInputException([String msg]) : super(msg, "Invalid Input: ");
}
6条答案
按热度按时间kqqjbcuj1#
是的,它是,语法接近C#,下面是一个同时使用默认构造函数和命名构造函数的示例:
如果你想初始化子类中的示例变量,
super()
调用必须在初始化器列表的最后。您可以在/r/dartlang上阅读此
super()
拜访指南背后的动机。b4lqfgs42#
这是我和你分享的一个文件,按原样运行它。你将学习如何调用超级构造函数,以及如何调用超级参数化构造函数。
ozxc1zmp3#
具有可选参数的构造函数的大小写
fivyi3re4#
我可以调用超类的私有构造函数吗?
可以,但前提是你创建的超类和子类在同一个库中。(因为私有标识符在定义它们的整个库中都可见)私有标识符是以下划线开头的。
0wi1tuuw5#
由于dart支持将一个类实现为接口(隐式接口),如果你实现了它,你就不能调用父构造函数,你应该使用extends。如果你使用了implements,把它改为extends,并使用Eduardo Copat的解决方案。
u0sqgete6#