在实现类的继承的时候,有很多需要注意的地方,包括语法,重写父类方法和访问父类成员。下面看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++通过父类的名字访问父类成员。