🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺
💗点关注不迷路,总有一些📖知识点📖是你想要的💗
继承
Java
通过子类和父类的关系实现,子类继承父类,则子类拥有父类所有非private的属性和方法。
方法重载:发生在同一个类中,在同一个类中处理不同数据的多个相同方法名的多态手段。
方法重写:发生在子类和父类之间,相对继承而言,子类中对父类已经存在的方法进行区别化的修改。
区别
1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。
Go
通过相应的结构体之间的组合来实现类似的继承效果。
package main
import "fmt"
type People struct {
Name string
Age int
}
type Student struct {
People
Score int
}
func main() {
var lcc Student
// people有两种初始化方法,lcc.People.Age和lcc.Name
lcc.People.Age = 18
lcc.Name = "lichuachua"
lcc.Score = 100
fmt.Println(lcc) //{{lichuachua 18} 100}
}
封装
封装的内容包括函数、方法、变量。
Java
通过访问权限控制实现封装,java通过public、private、protected进行控制;
Go
Go通过首字母是否大写判断:首字母大写为public,首字母小写为private;Go中只有public和private两种。
在同一个包内任何函数/方法都可以访问此包下面的所有public和private;不同包之间的函数/方法只能访问另一个包的public。在Go语言中public和private主要体现在不同包之间的访问。
多态
Java
同一个行为具有多个不同表现形式或形态的能力,多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
Go
通过接口(interface)实现。定义一个interface类型,该类型说明了它有哪些方法。struct实现了某个interface中的所有方法,那么我们就认为,这个struct实现了这个类。
使用时,在函数中,将该interface类型作为函数的形参,任意一个实现了interface类型的实参都能作为该interface的实例对象。Go中没有implements关键字,与Java的实现多态相比,Go的组合更加灵活。
package main
import "fmt"
type Animals interface {
Say()
}
type Dog struct{}
type Cat struct{}
func (d Dog) Say() {
fmt.Println("wangwang")
}
func (c Cat) Say() {
fmt.Println("miaomiao")
}
func main() {
var d Dog
d.Say()
Animals.Say(d)
var c Cat
c.Say()
Animals.Say(c)
}