🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点,以及职场小菜鸡的生活。🌺

💗点关注不迷路,总有一些📖知识点📖是你想要的💗

继承

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)
}