提问人:newlunch 提问时间:8/26/2023 最后编辑:Christopher Moorenewlunch 更新时间:8/27/2023 访问量:31
这两种方法有什么区别?为什么一种方法有效,而另一种方法无效?
What is the difference between this two approaches ? Why one approach works while the other doesn't?
问:
class A {
A(int value){
print(value);
}
}
class B extends A{
int x;
B.one(this.x) : super(x);
B.two(int x) : this.x = x, super(this.x);
}
我们这里有一个名为“B”的类,它继承自类“A”。B 类有两个构造函数 - B.one() 和 B.two()。但只有 B.one() 工作正常,而 B.two() 只是抛出一个错误。问题是 - 为什么 ?在我看来,B.one() 的工作方式与 B.two() 完全相同 - B.one() 只是以较短的形式编写。问题是:dart 根本不让我在 B.two() 中将值 this.x 传递给超类。但是在 B.one() 中,它让我!我正在将参数中完全相同的变量传递给 A 类,但只有 B.one() 让我这样做。这两个构造函数的工作之间到底有什么区别?
我遇到了这个解决方案:
class A {
A(int value){
print(value);
}
}
class B extends A{
int x;
B.one(this.x) : super(x);
B.two(int x) : this.x = x, super(x);
}
只需从 B.two() 中删除此关键字 - 它就可以了。但现在它引用的不是在 B 类字段中声明的变量 - 它评估到在此构造函数中声明的超类变量。为什么我必须在 B.two() 中采用这种方法,但在 B.one() 中我可以将 x 字段传递给超类?这个解决方案根本无法回答我的问题。
答: 暂无答案
评论
this