zoukankan      html  css  js  c++  java
  • Go如何使用实现继承的组合

    Go它提供了一个非常值得称道的并发支持,但Go它不支持完全面向对象的。这并不意味着Go不支持面向对象,,和Go的OO系统做的很轻巧,学习降至最低成本。向对象让Go失去了一些OO的方便特性,可是更高的效率和多返回值多少弥补了这一点。


    那些全然支持面向对象的语言一般都具有继承的功能。继承有非常棒的长处,最简单了讲。就是能够少写代码。当然,继承并不不过让你省了敲几下键盘的功夫,它还能更好的抽象程序中各种类型之间的关系。


    Go的OO系统不支持继承。可是能够使用Go中一种叫做"组合"的方法来实现继承。以下演示两段程序,看过了之后你就会明确Go的这样的组合技巧了。


    C++中的继承:

    #include <iostream>
    using namespace std;
    
    class Person {
    public:
        void Say();
    };
    void Person::Say() {
        cout << "I'm a person." << endl;
    }
    
    // 继承
    class Student : public Person {
    };
    
    int main() {
        Student s;
        s.Say();
        return 0;
    }

    等效的Go程序:

    package main
    
    type Person struct {
    }
    func (p *Person) Say() {
        println("I'm a person.")
    }
    
    // 组合
    type Student struct {
        Person
    }
    
    func main() {
        var s Student
        s.Say()
    }

    这两个程序执行之后结果都是: 

    I'm a person.


    能够看出Go能够通过组合还有一个类型来"继承"它的全部行为。十分直观。只是C++和Go的这两段代码表达的意义事实上还是有些稍微的区别。C++的类继承表示Person是Student的一个父类,具有一种层次关系。可是Go的组合则表达了一种Student是个人,所以Student包括了Person的全部行为。即人能做的事情Student就能做,Student骨子里也是个人。


    不管是继承还是组合,"复制"来的行为都是能够重写的~

    希望这篇博文让你学会了Go的组合。



    假设转载请注明出处:http://blog.csdn.net/gophers


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    c-指针
    iOS 多线程
    iOS 必备技术点
    网络请求
    objective-c基础教程——学习小结
    id类型
    排序算法
    iOS网络
    iOS 绘图
    Python——字符串2.0(实验)(python programming)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4620699.html
Copyright © 2011-2022 走看看