以下是应用.md格局别离实现Go语言、Rust、C语言、PHP、Node.js和Zig的继承代码的示例:
Go语言
package mainimport "fmt"type Animal struct { name string}func (a Animal) Speak() { fmt.Println("Animal speaks...")}type Dog struct { Animal breed string}func (d Dog) Speak() { fmt.Println("Dog barks...")}func main() { animal := Animal{} animal.Speak() dog := Dog{Animal: Animal{name: "Tom"}, breed: "Labrador"} dog.Speak()}
Rust
trait Speak { fn speak(&self);}struct Animal { name: String,}impl Speak for Animal { fn speak(&self) { println!("Animal speaks..."); }}struct Dog { animal: Animal, breed: String,}impl Speak for Dog { fn speak(&self) { println!("Dog barks..."); }}fn main() { let animal = Animal { name: String::from("Animal") }; animal.speak(); let dog = Dog { animal: Animal { name: String::from("Tom") }, breed: String::from("Labrador") }; dog.speak();}
C语言
#include <stdio.h>#include <stdlib.h>typedef struct { void (*speak)(void*); char* name;} Animal;void animal_speak(void* animal) { printf("Animal speaks...\n");}Animal* animal_new() { Animal* animal = (Animal*)malloc(sizeof(Animal)); animal->speak = animal_speak; return animal;}typedef struct { Animal animal; char* breed;} Dog;void dog_speak(void* dog) { printf("Dog barks...\n");}Dog* dog_new(char* name, char* breed) { Dog* dog = (Dog*)malloc(sizeof(Dog)); dog->animal.name = name; dog->animal.speak = dog_speak; dog->breed = breed; return dog;}int main() { Animal* animal = animal_new(); animal->speak(animal); Dog* dog = dog_new("Tom", "Labrador"); dog->animal.speak(dog); return 0;}
PHP
<?phpinterface Speak { public function speak();}class Animal implements Speak { public $name; public function speak() { echo "Animal speaks...\n"; }}class Dog extends Animal { public $breed; public function speak() { echo "Dog barks...\n"; }}$animal = new Animal();$animal->speak();$dog = new Dog();$dog->name = "Tom";$dog->breed = "Labrador";$dog->speak();?>
Node.js
class Animal { constructor(name) { this.name = name; } speak() { console.log("Animal speaks..."); }}class Dog extends Animal { constructor(name, breed) { super(name); this.breed = breed; } speak() { console.log("Dog barks..."); }}const animal = new Animal();animal.speak();const dog = new Dog("Tom", "Labrador");dog.speak();
Zig
const std = @import("std");pub const Interface = struct { speak: fn(self: anytype) void,};pub const Animal = struct { interface: Interface, name: []u8,};pub const Dog = struct { animal: Animal, breed: []u8,};pub fn speak(animal: anytype) void { std.debug.print("Animal speaks...\n", .{});}pub fn animal_new() Animal { return Animal { .interface = Interface { .speak = speak }, .name = "Animal", };}pub fn dog_new(name: []const u8, breed: []const u8) Dog { return Dog { .animal = Animal { .interface = Interface { .speak = speak }, .name = name, }, .breed = breed, };}pub fn main() !void { const animal = animal_new(); animal.interface.speak(&animal); const dog = dog_new("Tom", "Labrador"); dog.animal.interface.speak(&dog);}
这些是简略的继承示例,用于介绍不同语言中的继承概念。具体的实现形式可能依据需要和语言个性有所差别。
本文由mdnice多平台公布