Go中匿名字段的方法继承与方法重写

// code_019_struct_anonymous_field_method project main.go
package main

import (
"fmt"
)

type Person struct {
name string
sex byte
age int
}

func (p *Person) PrintInfo() {
fmt.Printf("Person:%s,%c,%d\n", p.name, p.sex, p.age)
}

type Student struct {
Person
id int
addr string
}

//方法被重写,但是不能被重载;若未被重写,则继承匿名字段的方法
func (s *Student) PrintInfo() {
fmt.Printf("Student:%s,%c,%d\n", s.name, s.sex, s.age)
}

func main() {
p := Person{"ck_god", ‘m‘, 18}
p.PrintInfo()

s := Student{Person{"god_girl", ‘f‘, 20}, 2, "sz"}
s.PrintInfo()
s.Person.PrintInfo()
}

运行结果如下:

Person:ck_god,m,18
Student:god_girl,f,20
Person:god_girl,f,20

原文地址:http://blog.51cto.com/13914991/2293998

时间: 2024-12-16 12:11:37

Go中匿名字段的方法继承与方法重写的相关文章

Java方法继承、方法重载、方法覆盖小总结

转自:http://blog.csdn.net/cdsnmdl/article/details/3968688 ———————————————————————————————————— 1.方法继承:利用extends关键字一个方法继承另一个方法,而且只能直接继承一个类. 当Sub类和Base类在同一个包时Sub类继承Base类中的public/protected/默认级别的变量个方法 在不同包时继承public/protected级别的变量和方法. 2.方法重载:如果有两个方法的方法名相同,但

dapper 自定义数据库字段和代码中Model字段不一致时候的mapping方法

namespace YourNamespace { /// <summary> /// Uses the Name value of the ColumnAttribute specified, otherwise maps as usual. /// </summary> /// <typeparam name="T">The type of the object that this mapper applies to.</typeparam

Java学习之方法重载和方法重写(覆盖)比较

方法重载和方法覆盖 请带着下面两点来看文章: 覆盖即重写,覆盖不等于重载,即重写不等于重载. 覆盖(重写)蕴含继承性,而重载只能在本类中使用,不含继承. 方法名和参数列表的比较 方法覆盖中的方法名和参数 首先创建基类Shape: public class Shape {   public void draw() { System.out.println("Shape.draw()"); } } 子类Circle: public class Circle extends Shape {

Go中的&quot;继承&quot;之struct的匿名字段

// code_016_anonymous_field project main.go package main import ( "fmt" ) type Person struct { name string sex byte age int } type Student struct { // 一般情况下,定义结构体的时候,字段名和类型一一对应,如下:Person为类型,并无字段名. Person //匿名字段,name默认Student就包含了Person的所有字段. id i

.NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以,跟着本篇的步伐,继续来围观. /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 6.扩展方法 7.系统内置委托 Func / Acti

C#中实现多继承的方法

近日看到了一个贴子,就是在C#语言中,如何实现多继承的问题.相信涉猎c#不多的人(像我这样的菜鸟),一看就觉得很可笑,c#肯定是不能实现多继承的啊.都知道在c++中因为实现多继承会有很多的歧义问题,所以在c#中就把多继承给取消了,而用接口来实现!但是想想,如果是初学者肯定不会不会问这样的问题.肯定是个高手,然后就开始上网查资料!然后发现真的可以实现! 说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗? 主流的答案无非2种. 答案一:用接口啊,一个类可以继承自多个接口的. 答案

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承.(4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承. 分析以上程序示例,主要疑惑点是“子类继承父类的成员变量,父类对象是否会实例化?私有成员变量是否会被继承?被继承的成员变量

mongoose中给字段添加索引的方法

mongoose中给字段添加索引的方法有两种,一种通过在定义schema的时候配置,如: 1 var animalSchema = new Schema({ 2 name: String, 3 type: String, 4 tags: { type: [String], index: true } 另一种通过index方法添加索引,如给name和type字段添加索引(1和-1分别表示升序索引和降序索引): animalSchema.index({ name: 1, type: -1 });

Entity Framework 中Decimal字段长度设置方法

在创建项目DbContext时,重写DbContext.OnModelCreating()方法:然后通过如下方法指定精度 1 protected override void OnModelCreating(DbModelBuilder modelBuilder) 2 { 3 modelBuilder.Entity<Product>().Property(product => product.Price).HasPrecision(18, 12); 4 } Entity Framework