[Golang] Go의 계승에 대해서 얘기해요.

2097 단어 Go

계승, 이 개념은 OOP 사상에서 나온다.
상속이란 어떤 유형의 대상이 다른 유형의 대상의 속성을 얻을 수 있는 방법을 가리킨다.그것은 등급별 개념을 지원한다.계승이란 이러한 능력을 가리킨다. 기존 클래스의 모든 기능을 사용할 수 있고, 원래의 클래스를 다시 작성할 필요가 없는 상황에서 이러한 기능을 확장할 수 있다. 
계승된 키워드:'획득','코드 복용'.
먼저 전형적인 OOP 언어인 파이톤이 계승에 대한 실현을 살펴보자.
class person:
    def say(self):
        print("person")

class lawyer(person):
    pass

p = person()
l = lawyer()
p.say()
l.say()

명백히 알 수 있듯이 lawyer라는 종류는 개인류를 계승한 후에 아무것도 하지 않고 자동적으로say 방법을 가지게 되었다.'획득','코드 복용'을 완벽하게 구현했다.
그럼 Go는 어떻게 상속을 실현합니까?코드 보기:
type person struct {
    Name string
}
func (this person) say(){
	fmt.Printf("i am %s
", this.Name) } //“ ”person type teacher struct { person // , , } // say func main (){ p := person{"trump"} p.say() t := teacher{person:person{"trump's teacher"}} t.say() }

코드는 아주 간단해서 설명하지 않겠습니다. 여기까지는 아직 끝나지 않았습니다.
왜 이 문장이 있습니까?고의 인터페이스로'상속'을 실현한다는 말이 있기 때문이다. 네, 인터페이스에서도 익명 필드를 사용할 수 있는데 이를'상속'을 실현한 것인가??그들이 어떻게 코드를 썼는지 보자.
// , 
type person_api interface {
	say()
}
// “ ” 
type person_2api interface {
	person_api
	run()
}

type lawyer struct {
	Name string
}
func (this lawyer) say(){
	fmt.Printf("i am lawyer %s
", this.Name) } type teacher struct { Name string } // teacher say func (this teacher) say(){ fmt.Printf("i am teacher %s
", this.Name) } func (this teacher) run(){ fmt.Printf("teacher %s is running
", this.Name) } func main (){ // , var a1 person_api = lawyer{"sccot"} a1.say() var a2 person_2api = teacher{"wiliam"} a2.say() a2.run() }

이것은 단지'인터페이스 계승'일 뿐이다. 인터페이스 창설을 편리하게 할 때의 문자 코드 복용일 뿐이다. 그러나 그 방법을 실제로 사용할 때 티처가say 방법을 실현하지 않으면 티처는 이 방법을 가지지 못한다. 즉, 인터페이스를 정의할 때'계승'의 이전 인터페이스만 루안이 사용하지 않고'인터페이스 계승'의 방식을 통해 진정으로 다른 구조체가 가지고 있는 방법을 얻을 수 없다.이른바'인터페이스 계승'이란 사실 OOP 사상이 언급한'계승'과 아무런 관계가 없다.
본고는 개인 학습의 귀납적 총결로서 조금도 흠이 없다는 것을 보장할 수 없다.제 글에 대해 이의가 있으시면 메시지를 남겨 주십시오.

좋은 웹페이지 즐겨찾기