有一个_
操作符使属性私有。
例如:_hidden()
这会将属性隐藏在文件外部。
现在,如果我有一个Parent
类,在文件parent.dart
中有func()
。
一个Child
类extends
Parent
类,在文件child.dart
中定义。
// parent.dart
class Parent {
void func() {
print("parent");
}
}
// child.dart
class Child extends Parent {
// How to make this private
@override
void func(){
super.func();
print("child");
}
}
字符串
如何在Child
类中将被重写的func()
函数设为私有?
在Child
类的func()
函数中添加_
不起作用,因为函数签名现在从Parent
类的func()
函数更改,因此它不再是重写函数,而是一个新函数。
1条答案
按热度按时间iecba09b1#
当你创建某个类型的子类时,子类必须满足该类型的基本要求。换句话说,在你的例子中,
Child
必须实现与Parent
类相同的属性和方法。我已经学会了这是一个“是”的关系。
假设你有一个
Duck
的层次结构,在最低层有一个swim()
方法,它派生自一个Bird
类,类有fly()
,类又有一个父类Animal
,类有walk()
。现在,如果你有一个
Duck
对象,你知道它可以swim
,但你也知道它可以fly()
(因为它是一只鸟)和walk()
(因为它是一只动物)。将父类的public方法设为private将违反“is a”规则,并且会破坏很多依赖于父类的代码。因此,虽然拥有一个拥有私有
_hidden()
方法的类Child
是有效的,但该类不能从Parent
派生,因为为了使某个类成为有效的父类,它必须有一个公共hidden()
方法。在我上面给出的例子中,
Duck
是Bird
,为了成为Bird
,你必须能够fly()
。如果你想建模另一个也会游泳的动物,比如Fish
,你应该给予这个类一个swim()
方法,但不能从Bird
类派生它。正如@Qori评论的那样,如果你想从超类中实现一些方法,但不是所有方法,你会想看看Dart中的多态性,组合和interface definitions。