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语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
随机推荐
- surging 如何使用流媒体服务
前言 随着直播行业大火,各种直播类产品和产品层出不穷,能够满足各方人员的需求和互动,也使得斗鱼.虎牙.抖音都随着直播业的大火而欣欣向荣, 大家也对直播平台了解不少,也参与使用,但是怎么样才能研发出视频 ...
- Python 极速入门指南
前言 转载于本人博客. 面向有编程经验者的极速入门指南. 大部分内容简化于 W3School,翻译不一定准确,因此标注了英文. 包括代码一共两万字符左右,预计阅读时间一小时. 目前我的博客长文显示效果 ...
- 1.8.5- input按钮组
- shackdow-socks 搭建
搭建步骤 wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadow-1-socks_install/m ...
- Sass中连体符(&)的运用
在CSS中,这种想法是无法实现的,但在Sass中,可以轻松的通过连体符&来实现.这也是我们今天要说的. 我们先来回忆一下,CSS中常见的一组样式: /*页面中链接的颜色*/ a {clolor ...
- [转]gitlab ci/cd 发布
转自 https://meigit.readthedocs.io/en/latest/configure_gitlab_i18n_and_create_gitlab_ci_with_gitlab_ru ...
- 路由器逆向分析------firmware-mod-kit工具安装和使用说明
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/68061957 一.firmware-mod-kit工具的安装 firmware-m ...
- hdu3786 Floyd或搜索 水题
题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu4122 制作月饼完成订单的最小花费
题意: 有一个加工厂加工月饼的,这个工厂一共开业m小时,2000年1月1日0点是开业的第一个小时,每个小时加工月饼的价钱也不一样,然后每个月饼的保质期都是t天,因为要放在冰箱里保存,所以在 ...
- DVWA之DOM XSS(DOM型跨站脚本攻击)
目录 Low Medium High Impossible Low 源代码: <?php # No protections, anything goes ?> 从源代码可以看出,这里low ...