GO语言面向对象03---接口与断言
接口的实现
package main
import "fmt"
type Animal interface {
//出生
SayHelloWord()
//死亡
Godie()
//生活
Live(food string) (Energy int)
}
type Pig struct {
Name string
}
/*猪的指针实现了动物接口*/
//出生
func (p *Pig)SayHelloWord(){
fmt.Printf("%s哼哼哼\n",p.Name)
}
//死亡
func (p *Pig)Godie(){
fmt.Printf("%s啊啊啊我死了\n",p.Name)
}
//生活
func (p *Pig)Live(food string) (Energy int){
fmt.Printf("%s食用了一些%s,生产了%d卡路里\n",p.Name,food,1200)
return 1200
}
type Cat struct {
Name string
}
/*猫的指针实现了动物接口*/
//出生
func (c *Cat)SayHelloWord(){
fmt.Printf("%s出生了\n",c.Name)
}
//死亡
func (c *Cat)Godie(){
fmt.Printf("%s:糟了life-=1\n",c.Name)
}
//生活
func (c *Cat)Live(food string)(Energy int){
fmt.Printf("铲屎官给%s大人服用了一些%s\n",c.Name,food)
return 1
}
func main031() {
var animal Animal
/*一个动物实例,既可以指向一只猪的指针,又可以指向一只猫的指针*/
//animal = &Pig{"佩奇"}
animal = &Cat{"加菲"}
/*无视当前的animal的具体类型,调度其动物的共性*/
animal.SayHelloWord()
animal.Godie()
animal.Live("饲料")
}
/*开一个肉联厂*/
func main() {
animals := make([]Animal, 0)
animals = append(animals, &Pig{"佩奇"})
animals = append(animals, &Cat{"加菲"})
for _,animal := range animals{
animal.Live("饲料")
animal.Godie()
}
}
接口的类型断言
package main
import "fmt"
type Animal interface {
//出生
SayHelloWord()
//死亡
Godie()
//生活
Live(food string) (Energy int)
}
type Pig struct {
Name string
}
/*猪的指针实现了动物接口*/
//出生
func (p *Pig)SayHelloWord(){
fmt.Printf("%s哼哼哼\n",p.Name)
}
//死亡
func (p *Pig)Godie(){
fmt.Printf("%s啊啊啊我死了\n",p.Name)
}
//生活
func (p *Pig)Live(food string) (Energy int){
fmt.Printf("%s食用了一些%s,生产了%d卡路里\n",p.Name,food,1200)
return 1200
}
func (p *Pig)Gongniba() {
fmt.Printf("%s在拱泥巴\n", p.Name)
}
type Cat struct {
Name string
}
/*猫的指针实现了动物接口*/
//出生
func (c *Cat)SayHelloWord(){
fmt.Printf("%s出生了\n",c.Name)
}
//死亡
func (c *Cat)Godie(){
fmt.Printf("%s:糟了life-=1\n",c.Name)
}
//生活
func (c *Cat)Live(food string)(Energy int){
fmt.Printf("铲屎官给%s大人服用了一些%s\n",c.Name,food)
return 1
}
func (c *Cat)Gulu() {
fmt.Printf("%s咕噜咕噜\n",c.Name)
}
func main031() {
var animal Animal
/*一个动物实例,既可以指向一只猪的指针,又可以指向一只猫的指针*/
//animal = &Pig{"佩奇"}
animal = &Cat{"加菲"}
/*无视当前的animal的具体类型,调度其动物的共性*/
animal.SayHelloWord()
animal.Godie()
animal.Live("饲料")
}
/*开一个肉联厂*/
func main() {
animals := make([]Animal, 0)
animals = append(animals, &Pig{"佩奇"})
animals = append(animals, &Cat{"加菲"})
/* for _,animal := range animals{
switch animal.(type) {
case *Cat:
fmt.Printf("发现一只猫:%v\n",animal)
case *Pig:
fmt.Printf("发现一只猪:%v\n",animal)
}
}*/
for _,animal := range animals{
cat,ok:= animal.(*Cat)
if ok{
cat.Gulu()
}
fmt.Println(animal,cat,ok)
pig,ok:= animal.(*Pig)
if ok{
pig.Gongniba()
}
fmt.Println(animal,pig,ok)
}
}
空接口与空接口的类型断言
package main
import "fmt"
func main() {
//空接口可以看做各种类型
data := make([]interface{}, 0)
data = append(data, "你妹")
data = append(data, 18)
data = append(data, 0.5)
data = append(data, false)
/*for _,x := range data{
switch x.(type) {
case string:
fmt.Println("发现字符串",x)
case int:
fmt.Println("发现整型",x)
case float64:
fmt.Println("发现浮点型",x)
default:
fmt.Println("发现其他类型",x)
}
}*/
for _,x := range data{
if xStr,ok := x.(string);ok{
fmt.Printf("发现字符串%s,长度是%d\n",xStr,len(xStr))
}else {
fmt.Println("其他类型",x)
}
}
}
GO语言面向对象03---接口与断言的更多相关文章
- Go语言基础之接口(面向对象编程下)
1 接口 1.1 接口介绍 接口(interface)是Go语言中核心部分,Go语言提供面向接口编程,那么接口是什么? 现实生活中,有许多接口的例子,比如说电子设备上的充电接口,这个充电接口能干什么, ...
- Java 面向对象之接口、多态
01接口的概念 A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成 ...
- Java面向对象:接口
Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...
- Go语言基础之接口
Go语言基础之接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口 接口介绍 在Go语言中接口(interface)是一种类型,一种抽象的类 ...
- GO学习-(14) Go语言基础之接口
Go语言基础之接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类 ...
- php调用一个c语言写的接口问题
用php调用一个c语言写的soap接口时,遇到一个问题:不管提交的数据正确与否,都无法请求到接口 1.用php标准的soap接口去请求 2.拼接xml数据去请求 以上两种方式都不正确 解决办法:php ...
- C语言与MATLAB接口 编程与实例 李传军编着
罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...
- C语言面向对象风格编程
前言 本文略谈C面向对象风格编程,如何使用过程式语言去模拟面向对象的特性?C面向对象的方式和形式很多,不一而足,本文的代码形式是模拟部分C++面向对象关键词并赋予其特性,这种方式对于初级程序员比较好理 ...
- C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
随机推荐
- 以 DEBUG 方式深入理解线程的底层运行原理
说到线程的底层运行原理,想必各位也应该知道我们今天不可避免的要讲到 JVM 了.其实大家明白了 Java 的运行时数据区域,也就明白了线程的底层原理,不过把这些东西明明白白写在纸面上的,网络上的文章并 ...
- NumPy之:数据类型对象dtype
目录 简介 dtype的定义 可转换为dtype的对象 dtype对象 None 数组标量类型 通用类型 内置Python类型 带有.dtype属性的对象 一个字符的string对象 数组类型的Str ...
- 【luogu P3803】【模板】多项式乘法(FFT)
[模板]多项式乘法(FFT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求这两个多项式乘起来得到的多项式.(卷积) 思路 系数表示法 就是我们一般来表示一个多项式的方法: \(A ...
- 关于width的继承和获取
absolute元素(如果没有设置width值),其宽度自适应于内部元素, <!DOCTYPE html> <html lang="en"> <hea ...
- 【SpringBoot】SpringBoot2.x整合定时任务和异步任务处理
SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...
- android dalvik浅析一:解释器及其执行
dalvik是android中使用的虚拟机,基于寄存器,分析基于android4.2源代码.本篇主要分析的是dalvik中的解释器部分,源码位于/dalvik/vm,主要代码在interp和mterp ...
- 【python】Leetcode每日一题-132模式
[python]Leetcode每日一题-132模式 [题目描述] 给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j &l ...
- CentOS防火墙相关命令
针对于CentOS-6(CentOS-7命令不同,CentOS-8输入以下指令会自动定向,可以通用) 查看防火墙状态 # service iptables status 关闭防火墙 # service ...
- Jedis基础详解
Jedis 使用Java来操作Redis 什么是Jedis 是Redis官方推荐的Java操作Redis中间件, 如果你要使用Java操作Redis, 那么就该对jedis熟悉 测试 导入对应的依赖 ...
- Cannot load driver class: com.mysql.jdbc.Driver
mysql-connector-java提供了mysql驱动等类库,此处必须引入此依赖,否则将会提示: Cannot load driver class: com.mysql.jdbc.Driver等 ...