dart - 如何覆盖子类中的类变量?
问题描述
我对 Dart 还很陌生,并且在某些类继承方面遇到了麻烦。我想知道如何正确覆盖子类中的类变量。
这是一个通用语言问题。我主要来自 Python 背景,我认为我只是缺少一些核心的 Dart 概念。
所以这是我正在寻找的一般情况:
我有一个Foo
定义一些类变量和方法的基类。变量名对 的所有子类是通用的Foo
,方法是通用行为。
本质上,我想做的是:
在foo.dart
:
class Foo {
int _x;
int timesTwo() {
return _x * 2;
}
}
然后在bar.dart
:
import 'foo.dart';
class Bar extends Foo {
int _x = 2;
}
然后在main.dart
:
import 'bar.dart';
main() {
Bar b = Bar();
print(b.timesTwo()); // NoSuchMethodError: The method '*' was called on null.
}
我尝试了static
, final
,_
等的各种组合。如果我将所有变量都公开,它确实有效,但这并不理想。
我知道该_x
变量是私有的,并且对它的访问仅限于文件。timesTwo()
使用已_x
定义(或实际上未定义)Foo
的.
但是我很困惑如何继承该timesTwo()
方法Foo
并让它使用Bar
.
理想情况下,我将能够在基类中定义一组共享方法,然后覆盖子类中的值。
有人可以帮助我了解如何定义这些类关系,以便我可以将私有类变量与基类方法一起使用吗?
编辑:上层类的覆盖变量中的问题似乎是相同的,但答案显示在子类方法中使用超类变量,而我想要的是定义超类中的行为,并用 with 覆盖变量那些来自子类的。
解决方案
您不能覆盖类中的_x
值,Bar
因为Foo
并且Bar
位于不同的库中。
只需将Bar
定义移动到foo.dart
并Bar
能够覆盖_x
,因为现在它们都在同一个库中。
dart 允许在单个文件中声明多个类。
将多个类放在一个库中可以启用一些有用的模式。由于 Dart 中的隐私在库级别而不是类级别起作用,因此这是一种定义“朋友”类的方法,就像在 C++ 中一样。在同一个库中声明的每个类都可以访问彼此的私有成员,但该库之外的代码不能。
推荐阅读
- mysql - 获取下一个 max(id)
- go - 等待所有 goroutine 完成并合并结果
- html - 下划线不适用于双行标题
- android - 如何使用 MVVM 在数据绑定中的 textinputlayout 下方设置错误消息
- java - 在 Android Studio Java 中添加 GIF
- scala - zio sqs 消息属性
- elasticsearch - Nest - 在弹性响应模拟方面需要帮助
- azure-devops - Azure cron 计划管道始终运行(没有失败的构建)
- windows-7 - 我如何检测输入()行中是否包含一段文本?**PYTHON**
- pytorch - 使用特定元素自定义批次