【Kotlin】小李的Kotlin学习笔记-3(面向对象编程)


前言

学习笔记主要整理自书籍《第一行代码》(第三版),是笔者为自己之后的复习准备的。分享出来希望也可以帮助到大家。


一、类的定义及实例化

1. 类的定义

示例

class Person{
	var name = ""
	var age = 0
	fun eat(){
		print(name+"在吃饭。他"+age+"岁了。")
	}
}

2. 类的实例化

示例(接上文)

fun main(){
	val p = Person() //类的实例化
	p.name = "张三"
	p.age = 19
	p.eat()
}

二、继承

在Kotlin中,任何一个非抽象类默认都是不可以被继承的(相当于Java中给类声明了final关键字)。

1. 继承类

示例:定义一个Student类,使其去继承Person类,且拥有自己独有的字段。

1)使Person类可被继承

open class Person{
  ...
}

2)使Student类继承Person类,且拥有自己独有的字段

class Student : Person(){
	var sno = ""
	var grade = 0
}

在Java中继承的关键字是"extends",而在Kotlin中继承的关键字是 “:”

2. 主构造函数

1)主构造函数
每个类默认都有一个不包含函数体的主构造函数(默认无参,但可以显示的给其指明参数),例如:

class Student(val sno: String, val grade: Int) : Person(){
}

在对Student类进行实例化的时候,必须传入构造函数中要求的所有参数:

val student = Student("a123", 5)

【特殊】如要在主构造函数里面编写逻辑语句,可用init结构体

class Student(val sno: String, val grade: Int) : Person(){
	init{
		println("sno is" + sno)
		println("grade is" + grade)
	}
}

3. 含参继承

1) Person类的主构造函数里面含参

open class Person(val name: String, val age: Int){
  ...
}

2)含参继承

class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age){
}

在student类的主构造函数中增加name和age字段时,为了防止和父类中同名的字段产生冲突,不声明其类型(var/val)

三、多态、接口

1、定义接口

interface Study{
	fun readBooks()
	fun doHomework()
}

2、使用接口

class Student(name: String, age: Int) : Person(name, age), Study{
	override fun readBooks(){
		println(name + " is reading.")
	}
	override fun doHomework(){
		println(name + " is doing homework.")
	}
}

3、调用接口函数

fun main(){
	val student = Student("Jack", 19)
	doStudy(student)
}
fun doStudy(study: Study){
	study.readBooks()
	study.doHomework()
}

4、对接口中的函数进行默认实现

interface Study{
	fun readBooks()
	fun doHomework(){
		println("do homework default implementation")
	}
}

当一个类去实现接口时,如果接口中有已定义的函数fun1,实现时不会强制实现,甚至可删

四、函数可见性修饰符

图片

五、数据类

创建数据类:

data class Cellphone(val brand: String, val price: Double)

说明:
当在一个类前面声明了data关键字之后,Kotlin会根据主构造函数中的参数自动生成equals(),hashcode(),toString()等方法。

六、单例类

Kotlin创建单例类

object Singleton{
	fun singletonTest(){
		println("singletonTest is called")
	}
}

调用单例类中的函数

Singleton.singletonTest()

Java创建单例类

public class Singleton{
	private static Singleton instance;
	
	private Singleton(){}

	public synchronized static Singleton getInstance(){
		if (instance == null){
			instance == new Singleton();
		}
		return instance;
	}

	public void singletonTest(){
		System.out.println("singletonTest is called")
	}
}

调用Java构建的单例类中的函数

Singleton singleton = Singleton.getInstance();
singleton.singletonTest();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值