package main
import (
"fmt"
)
type Studyer interface {
Study(x []float64)
}
type Pupil struct {
Name string
}
func (p *Pupil) Study(x []float64) {
fmt.Println(p.Name, "正在学习以下科目:")
fmt.Println("语文、数学、英语、思想品德")
}
type MidStudent struct {
Name string
}
func (m *MidStudent) Study(x []float64) {
fmt.Println(m.Name, "正在学习以下科目:")
fmt.Println("语文、数学、英语、物理、化学、政治、历史、地理")
}
type ColStudent struct {
Name string
}
func (c *ColStudent) Study(x []float64) {
fmt.Println(c.Name, "正在学习以下科目:")
fmt.Println("专业课程、选修课程")
}
func PrintStudyContent(s Studyer) {
s.Study(nil)
}
func main() {
var sType string
fmt.Print("请输入学生类型(Pupil、MidStudent、ColStudent):")
fmt.Scanln(&sType)
switch sType {
case "Pupil":
p := &Pupil{"Tom"}
PrintStudyContent(p)
case "MidStudent":
m := &MidStudent{"Jerry"}
PrintStudyContent(m)
case "ColStudent":
c := &ColStudent{"Lucy"}
PrintStudyContent(c)
default:
fmt.Println("未知学生类型")
}
}
package main
import "fmt"
type Good interface {
settleAccount() float64
orderInfo() string
}
type Phone struct {
name string
price float64
}
func (p Phone) settleAccount() float64 {
return p.price
}
func (p Phone) orderInfo() string {
return fmt.Sprintf("%s: %.2f", p.name, p.price)
}
type FreeGift struct {
name string
}
func (f FreeGift) settleAccount() float64 {
return 0
}
func (f FreeGift) orderInfo() string {
return f.name
}
func main() {
iphone := Phone{name: "iPhone", price: 999.99}
earphones := FreeGift{name: "Earphones"}
cart := []Good{iphone, earphones}
for _, item := range cart {
fmt.Println(item.orderInfo())
}
}