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