这里我想用自己的理解来向你解释什么是面向对象编程。不同于面向过程的语言(比如
C
语言),面向对象的语言是可以创建类的。类就是对事物的一种封装,比如说人、汽车、房
屋、书等任何事物,我们都可以将它封装一个类,类名通常是名词。而类中又可以拥有自己的
字段和函数,字段表示该类所拥有的属性,比如说人可以有姓名和年龄,汽车可以有品牌和价
格,这些就属于类中的字段,字段名通常也是名词。而函数则表示该类可以有哪些行为,比如
说人可以吃饭和睡觉,汽车可以驾驶和保养等,函数名通常是动词
创建一个人的类
![](https://img-blog.csdnimg.cn/c72a10f27a904d37be602ea4359e065a.png)
创建一个kt文件
首次运行可能会报一个错误java.lang.ClassNotFoundException:
找不到一个执行文件
问题不大,直接运行第二遍
运行结果
![](https://img-blog.csdnimg.cn/602e81935c5240a788244c09d7edcbcc.png)
继承与构造函数
现在我们开始学习面向对象编程中另一个极其重要的特性
——
继承。继承也是基于现实场景总
结出来的一个概念,其实非常好理解。比如现在我们要定义一个
Student
类,每个学生都有自
己的学号和年级,因此我们可以在
Student
类中加入
sno
和
grade
字段。但同时学生也是人
呀,学生也会有姓名和年龄,也需要吃饭,如果我们在
Student
类中重复定义
name
、
age
字段
和
eat()
函数的话就显得太过冗余了。这个时候就可以让
Student
类去继承
Person
类,这样
Student
就自动拥有了
Person
中的字段和函数,另外还可以定义自己独有的字段和函数。
![](https://img-blog.csdnimg.cn/8dc6aabc40b748cdb67a994f5fb76c6f.png)
很明显,
Kotlin
在设计的时候遵循了这条编程规范,默认所有非抽象类都是不可以被继承的。之
所以这里一直在说非抽象类,是因为抽象类本身是无法创建实例的,一定要由子类去继承它才
能创建实例,因此抽象类必须可以被继承才行,要不然就没有意义了。由于
Kotlin
中的抽象类和
Java
中并无区别,这里我就不再多讲了。
既然现在
Person
类是无法被继承的,我们得让它可以被继承才行,方法也很简单,在
Person
类的前面加上
open
关键字就可以了
![](https://img-blog.csdnimg.cn/7417bb6256bc4615a1c1a4be465b9465.png)
两种写法
![](https://img-blog.csdnimg.cn/72b10bd1d38e46a486d65c3cb4c38ace.png)
直接在函数里面定义自己想要的类型方法
![](https://img-blog.csdnimg.cn/96554e39cc5747808f7aaea064637f2e.png)
kt实现方法一
方法二
![](https://img-blog.csdnimg.cn/79ad5796382f4f82bbef1f1381562431.png)
![](https://img-blog.csdnimg.cn/1308328cf4494653a665241a57e678bc.png)
类似于java new对象
实现结果
![](https://img-blog.csdnimg.cn/1eeff242e65145088ad5009cedf1759e.png)