如何在Rust中调用一个“父方法”?在Java中如下:
public class parent{
...
public void doSomething(){
System.out.println("Parent method");
}
}
public class child extends parent{
...
public void doSomething(){
super.doSomething();
System.out.println("Child method.");
}
}
在Go语言中,我们可以通过struct中的匿名字段来模拟它:
type parent struct{}
func (self *parent) doSomething() {
fmt.Println("parent method")
}
type child struct {
parent
}
func (self *child) doSomething() {
self.parent.doSomething()
fmt.Println("child method")
}
func main() {
var c1 child
c1.doSomething()
}
如何在Rust中模拟它?
2条答案
按热度按时间tp5buhyn1#
引擎盖下的情况不太一样,但有点像
有一些建议可以让这部分自动化(例如,如果我们只想直接调用父方法,即不覆盖子方法中的方法,那么目前必须自己显式调用父方法)。
rpppsulh2#
继承的要点是能够覆盖继承的方法。上面提供的示例仍然处理委托而不处理继承。
让我们看一些Go语言代码来说明这一点:
如果你这样运行上面的代码
它会将“foo magic”打印到控制台而不是“base magic”。但是,如果我们运行以下代码
它也不会打印“foo magic”,但这次打印“base magic”。2这是因为缺少继承,因此不能覆盖方法Magic(又名动态链接)。3所以我们仍然在处理委托。
你可以按照this文章中的“内部模式”一节中的描述来解决这个问题。我不知道关于Rust的确切情况。乍一看似乎是一样的。