Skip to content

Instantly share code, notes, and snippets.

@kranfix
Created March 21, 2020 22:51
Show Gist options
  • Save kranfix/1c693e6191e78971b72a8b5d59092f0c to your computer and use it in GitHub Desktop.
Save kranfix/1c693e6191e78971b72a8b5d59092f0c to your computer and use it in GitHub Desktop.
Dart: Inheritance issues
// Reference: https://talks.golang.org/2014/go4java.slide#41
void main() {
RunCounter runner = RunCounter("my runner");
List<Task> tasks = [Task("one"), Task("two"), Task("three")];
runner.runAll(tasks);
print("${runner.name} ran ${runner.count} tasks");
}
//void printd(Object object) => print(object);
void printd(Object object) => null;
class Task {
final String key;
const Task(this.key);
run() => print("Running Task $key");
}
class Runner {
String _name;
Runner(String name) : _name = name;
String get name => _name;
void run(Task task) {
printd("[Runner($_name).run]");
task.run();
}
void runAll(List<Task> tasks) {
printd("[Runner($_name).runAll]");
for (final Task task in tasks) {
this.run(task);
}
}
}
class RunCounter extends Runner {
int _count;
RunCounter(String message)
: _count = 0,
super(message);
int get count => _count;
@override
void run(Task task) {
printd("[RunCounter($_name).run]");
_count++;
super.run(task);
}
@override
void runAll(List<Task> tasks) {
printd("[RunCounter($_name).runAll]");
_count += tasks.length;
super.runAll(tasks);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment