Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 如何创建可以在Dart的子类中重新定义的私有方法?_Inheritance_Dart_Private Methods - Fatal编程技术网

Inheritance 如何创建可以在Dart的子类中重新定义的私有方法?

Inheritance 如何创建可以在Dart的子类中重新定义的私有方法?,inheritance,dart,private-methods,Inheritance,Dart,Private Methods,每当我定义这样的私有方法时: class父类{ sayHi(){u initiateGreeting();} _initiateGreeting(){print(“我是父类”);} } 不可能在子类中重新定义它: class子类扩展父类{ _initiateGreeting(){print(“我是子类”);}//重新定义方法 } 现在,如果我创建一个ChildClass的实例并调用sayHi()方法,那么实际上调用的是来自ParentClass的私有方法: var child=new Chi

每当我定义这样的私有方法时:

class父类{
sayHi(){u initiateGreeting();}
_initiateGreeting(){print(“我是父类”);}
}
不可能在子类中重新定义它:

class子类扩展父类{
_initiateGreeting(){print(“我是子类”);}//重新定义方法
}
现在,如果我创建一个
ChildClass
的实例并调用
sayHi()
方法,那么实际上调用的是来自
ParentClass
的私有方法:

var child=new ChildClass();
child.sayHi();//输出“我是父类”
但是,如果
\u initiateGreeting()
在任何地方都公开(即,去掉
\u
),则调用
child.sayHi()
将导致输出
我是一个child类

为什么??如何重新定义私有方法,以便在子类中调用它?

私有成员可以被视为库成员。在库中,带或不带前置下划线的成员之间没有区别


因此,如果您在同一个库中,您应该能够在子类中重新定义该方法。

这很有趣。但是如果
ParentClass
属于一个库怎么办?也就是说,在文件顶部有一个
部分的
语句,它包含
ParentClass
,而
ChildClass
不是该库的一部分(讽刺的是,这就是我的情况)?是否希望
ChildClass
不会扩展代码段中的
ParentClass
<代码>部分
不应该对隐私产生影响。我做了一些挖掘,看起来
语句的
部分实际上影响到我是否可以重新定义私有方法:Florian给出了与我的回答相同的解释。前缀下划线表示库私有<代码>部分
只是将一个库切割成多个部分的一种方法,但它仍然是同一个库。