首页 > 其他分享 >go接口01隐式实现特性

go接口01隐式实现特性

时间:2024-10-25 21:50:44浏览次数:3  
标签:myPet 01 实现 Dog 接口 Animal go 方法 隐式

在 Go 语言中,接口的隐式实现特性意味着只要类型定义了接口所需的所有方法,即被视为实现了该接口,无需显式声明。以下是一个示例说明:

package main

import "fmt"

// 定义接口 Animal
type Animal interface {
    Speak()
    Move()
}

// 定义结构体 Dog,实现 Animal 接口的两个方法
type Dog struct {
    Name string
}

// Dog 结构体实现 Animal 接口的 Speak 方法
func (d Dog) Speak() {
    fmt.Println(d.Name, "barks")
}

// Dog 结构体实现 Animal 接口的 Move 方法
func (d Dog) Move() {
    fmt.Println(d.Name, "moves around")
}

func main() {
    // 创建一个 Dog 实例并赋值给 Animal 接口类型变量
    var myPet Animal = Dog{Name: "Fido"}

    // 调用 Animal 接口的方法,实际上会调用 Dog 结构体的对应方法
    myPet.Speak()
    myPet.Move()
}

在上述示例中,Dog 结构体定义了 Speak()Move() 两个方法,并且没有显式地声明实现了 Animal 接口。然后,使用 var myPet Animal = Dog{Name: "Fido"}Dog 类型赋值给 Animal 接口类型的变量 myPet

通过这种隐式实现的方式,编译器会自动检查 Dog 结构体是否实现了 Animal 接口中定义的所有方法。因为 Dog 结构体实现了 Speak()Move() 方法,所以它被视为实现了 Animal 接口。最终,我们可以通过 Animal 接口变量来调用 Speak()Move() 方法,实际上调用的是 Dog 结构体的方法,展示了接口的隐式实现特性。

类比Java,在 Java 中,接口实现是显式的,不像 Go 语言中那样隐式。以下是一个类似的示例,在 Java 中展示如何定义接口和实现该接口:

// 定义接口 Animal
interface Animal {
    void speak();
    void move();
}

// 定义类 Dog,并实现 Animal 接口
class Dog implements Animal {
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    @Override
    public void speak() {
        System.out.println(name + " barks");
    }

    @Override
    public void move() {
        System.out.println(name + " moves around");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建一个 Dog 实例并赋值给 Animal 接口类型的变量
        Animal myPet = new Dog("Fido");

        // 调用 Animal 接口的方法,实际上会调用 Dog 类的对应方法
        myPet.speak();
        myPet.move();
    }
}

在这个 Java 示例中,我们定义了一个 Animal 接口,并且创建了一个 Dog 类来实现这个接口。通过显式地使用 implements 关键字来表示 Dog 类实现了 Animal 接口,确保了 Dog 类中包含了接口中所有定义的方法。

然后,在 main 方法中,我们创建了一个 Dog 类型的实例,并将其赋值给 Animal 接口类型的变量 myPet。最后,我们可以通过 myPet 变量调用 speak()move() 方法,这些方法实际上是在 Dog 类中定义的,展示了 Java 中接口的显式实现方式。

欢迎关注第一时间推golang,云计算相关文章

标签:myPet,01,实现,Dog,接口,Animal,go,方法,隐式
From: https://blog.csdn.net/weixin_44586352/article/details/143244440

相关文章

  • 20241024每日一题洛谷P1012
    普及-洛谷P1012拼数设有n个正整数,a1a2a3......an将它们联接成一排,相邻数字首尾相接,组成一个最大的整数输入:第一行有一个整数,表示数字个数n第二行有n个整数,表示给出的n个整数ai输出:一个正整数,表示最大的整数可以考虑两种路线:使用sort函数编辑cmp参数进行字符串......
  • Go 实现 LRU 和 LFU
    0.前言缓存是一个非常大的topic。常用的缓存算法有LRU(LatestRecentlyUsed)最近最少使用和LFU(LatestFrenquencyUsed)最不经常最少使用算法。本文会介绍这两种算法,并且给出缓存使用的一些介绍。1.LRU首先,LRU是最近最少使用算法,根据时间的顺序淘汰最久没被使用到的缓存......
  • webRTC搭建:STUN 和 TURN 服务器 链接google的有点慢,是不是可以自己搭建
    如果使用Google提供的STUN/TURN服务器速度较慢,你完全可以自己搭建STUN和TURN服务器。这有助于提升网络连接速度和稳定性,特别是在需要穿透NAT或防火墙的网络环境下。下面是如何自己搭建STUN和TURN服务器的具体步骤:1.选择TURN/STUN服务器软件推荐使用Cot......
  • WEBRTC教程:局域网怎么调试,http://172.19.18.101:8080 ,无法访问摄像头和麦克风,请检查
    在局域网中使用WebRTC时,无法访问摄像头和麦克风通常是因为浏览器的安全策略限制了getUserMediaAPI的使用。如果你在非localhost或非HTTPS环境下访问网页,浏览器会阻止访问摄像头和麦克风。解决方案在局域网中调试WebRTC时,你有几个选项来解决这个问题:1.使用lo......
  • 【408真题】2014-46
    “接”是针对题目进行必要的分析,比较简略;“化”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。涉及到的知识全部来源于王道各科教材(2025版)(408神功练成中……)文章目录一、接:本题分析二、化:套路总结一、接:本题分析2014-46分析【答】1)【标......
  • E71 树形DP+二分 P3523 [POI2011] DYN-Dynamite
    视频链接:   P3523[POI2011]DYN-Dynamite-洛谷|计算机科学教育新生态//树形DP+二分O(nlogn)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;intread(){intx=0,f=1;charc=getchar();while(c>'9'||c......
  • 没错,Go 语言的函数参数没有引用传递方式
    这篇文章想浅浅地讲解Go语言函数参数传递的值拷贝。一句话观点Go语言中所有传递都是值传递,严格来说并不存在引用传递的概念。传递指针只是传递指针的值,并不是引用传递,只不过通过指针可以间接修改变量的值,从而达到类似引用传递的效果。值传递值传递就是将参数的副本传递给函......
  • c++/python/java/go用途介绍
    C++用途:系统编程:操作系统、驱动程序等底层开发。游戏开发:游戏引擎和高性能游戏应用,因其高效的性能和内存管理。嵌入式系统:适合资源受限的设备。科学计算:高性能计算和数值分析。金融系统:高频交易和复杂金融模型。Python用途:数据科学与分析:广泛用于数据处理和可视化......
  • go 连MQ
    go连MQpackagemainimport( "context" "fmt" "os" "github.com/apache/rocketmq-client-go/v2" "github.com/apache/rocketmq-client-go/v2/primitive" "github.com/apache/rocketmq-client-go/v2/produce......
  • [转]阅读Go源码的顿悟时刻
    文章转自:https://zhuanlan.zhihu.com/p/2119163293我对各个顿悟时刻简单的总结如下:切片为什么切片操作后总返回一个新切片:因为其内部的数组会在容量满后自动扩容预先分配切片的大小避免扩容是个好办法协程是合作式的(cooperative)go中高效的GMP模型go的编......