Rust继承:调用父方法

sun*_*016 12 rust

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.");
    }
}
Run Code Online (Sandbox Code Playgroud)

在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()
}
Run Code Online (Sandbox Code Playgroud)

如何在Rust中模拟它?谢谢!

huo*_*uon 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();
}
Run Code Online (Sandbox Code Playgroud)

有一些建议可以自动生成部分内容(例如,如果我们想直接调用父方法,即不要覆盖子方法中的方法,那么当前必须自己显式调用父方法).

  • 这仍然是这样做的方式还是他们的更新?对不起,我自己搜索了一下,但很难找到Rust的最新信息. (2认同)
  • @JeroenBollen,是的,仍然是这样做的. (2认同)
  • 这个问题是它不适用于Struct字段.例如,如果要在其他一些结构中重用基础Struct字段,该怎么办?`struct Animal {health:int; } struct Dog {fn bark() - >(){...}}`狗如何继承Animal的健康? (2认同)