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中模拟它?谢谢!
答案 0 :(得分:15)
引擎盖下的情况并不完全相同,但有点像
trait DoThings {
fn do_something(&self);
}
struct Parent;
impl DoThings for Parent {
fn do_something(&self) { println("doing something"); }
}
struct Child {
parent: Parent
}
impl DoThings for Child {
fn do_something(&self) {
self.parent.do_something();
println("child");
}
}
fn main() {
let c = Child { parent: Parent };
c.do_something();
}
有一些建议可以自动生成部分内容(例如,如果我们想直接调用父方法,即不要覆盖子方法中的方法,那么当前必须自己显式调用父方法)
答案 1 :(得分:-2)
继承点是能够覆盖继承的方法。上面提供的样本仍然处理授权而不是继承。
让我们看一下Go代码来说明这一点:
type Base struct {}
func (Base) Magic() { fmt.Print("base magic") }
func (self Base) MoreMagic() {
self.Magic()
}
type Foo struct {
Base
}
func (Foo) Magic() { fmt.Print("foo magic") }
如果你以这种方式运行代码
f := new(Foo)
f.Magic()
它将打印" foo magic"到控制台,而不是"基础魔法"。但是,如果我们运行此代码
f := new(Foo)
f.MoreMagic()
它不会打印" foo magic"同样,但这一次"基础魔法"。这是因为缺少继承,因此无法覆盖魔术方法(又称动态链接)。所以我们仍在处理代表团。
你可以解决这个问题。如#14;内部Patern"部分所述。在this文章中。我不确切地知道关于Rust的这个问题。乍一看似乎是一样的。