如何调用子类的方法

mmooyyii · 2020-05-07 00:05:46 · 1222 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-05-07 00:05:46 的主题,其中的信息可能已经有所发展或是发生改变。

package com.company;

class A {
    void f() {
        System.out.println("1");
    }

    void g() {
        f();
    }
}

class B extends A {
    void f() {
        System.out.println("2");
    }
}

public class Main {

    public static void main(String[] args) {
        new B().g();
    }

}

该java代码中,打印的结果是2

package main

import "fmt"

type c interface {
    f()
    g()
}
type a struct {
}

func (a1 a) f() {
    fmt.Println(1)
}
func (a1 a) g() {
    a1.f()
}

type b struct {
    a
}

func (b1 b) f() {
    fmt.Println(2)
}

func main() {
    bb := b{a{}}
    bb.g()
}

但是go的代码类似的写法打印的是1, 那么我要调用打印2的方法,我应该怎么写呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1222 次点击  
加入收藏 微博
6 回复  |  直到 2020-05-07 17:03:18
mmooyyii
mmooyyii · #1 · 5年之前

再附加一个python版本的,为什么go的继承和其他的不太一样

class A:

    def f(self):
        print(1)

    def g(self):
        self.f()


class B(A):

    def f(self):
        print(2)


if __name__ == '__main__':
    b = B()
    b.g()
zhengkeyu
zhengkeyu · #2 · 5年之前

用接口

mmooyyii
mmooyyii · #3 · 5年之前
zhengkeyuzhengkeyu #2 回复

用接口

所以我是要把a.g()复制一次变成b.g()吗?我是个新手,能说具体点吗?

zhengkeyu
zhengkeyu · #4 · 5年之前
mmooyyiimmooyyii #3 回复

#2楼 @zhengkeyu 所以我是要把a.g()复制一次变成b.g()吗?我是个新手,能说具体点吗?

func (a1 a) g() { a1.f() } 换成 func (a1 b) g() { a1.f() } 就可以了

qysz
qysz · #5 · 5年之前

可以试试这样

func gg(cc c) {
    cc.f()
}

func main() {
    bb := b{a{}}
    //bb.g()
    gg(bb)
}
mmooyyii
mmooyyii · #6 · 5年之前
qyszqysz #5 回复

可以试试这样 ``` func gg(cc c) { cc.f() } func main() { bb := b{a{}} //bb.g() gg(bb) } ```

非常感谢

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传