C/C++、Java、Go、Python总结对比18-类的继承

在实现类的继承的时候,有很多需要注意的地方,包括语法,重写父类方法和访问父类成员。下面看c++、java和python的实现,以及go如何间接实现类的继承功能。

c++的写法

 #include <string>
#include <iostream>

using namespace std;

//定义父类
class Father {
public:
    string name = "father";

    void printName() {
        cout << name << endl;
    }
};

//子类继承父类
class Son : public Father {
public:
    string name = "son";

    void printName() {  //重写父类的方法
        Father::printName();  //访问父类的方法
        cout << name << endl;
    }
};

int main() {
    Son son;
    son.printName();
}

java的写法

//定义父类
public class Father {
    public String name = "father";
    public void printName() {
        System.out.println(name);
    }
}

 

//子类继承父类
public class Son extends Father {
    public String name = "son";
    public void printName() {  //重写父类方法
        super.printName();  //调用父类方法
        System.out.println(name);
    }
}

 

public class Main {
    public static void main(String[] args) {
        Son son = new Son();
        son.printName();
    }
}

go的写法

 func printName() {
	fmt.Println("i am father")
}

//通过结构体实现父类
type Father struct {
	name      string
	printName func()
}

//通过结构体实现子类,并继承父类
type Son struct {
	name   string
	father Father
}

func main() {
	father := Father{"father", printName}  //定义父类
	son := Son{"son", father}  //定义子类
	son.father.printName()  //调用父类方法
}

python的写法

# 定义父类
class Father:
    def __init__(self):
        self.name = "father"

    def print_name(self):
        print(self.name)

# 定义子类
class Son(Father):
    def __init__(self):
        self.name = "son"

    def print_name(self):  # 重写父类方法
        super().print_name()  # 调用父类方法
        print(self.name)


if __name__ == "__main__":
    son = Son()
    son.print_name()

对比总结:

1. c++、java和python的类的继承大同小异,其中c++的继承分为public、protect和private继承,一般使用public继承,如果需要详细了解请看之前的文章https://zhuanlan.zhihu.com/p/64303917 ; go通过结构体间接实现类。

2. java和python通过super访问父类的成员,c++通过父类的名字访问父类成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值