Kotlin开发之——类与对象
类与对象的关系
对象是对问题领域中事物的抽象
对象的特征:
- 世间万物皆对象
- 每个对象都是唯一的
- 对象具有属性和行为
- 对象具有状态
- 对象都属于某个类,每个对象都是某个类的实例
Kotlin类和对象
类的定义
Kotlin类可以包含:
- 构造函数
- 初始化代码块
- 函数
- 属性
- 内部类
- 对象声明
Kotlin中使用关键字class 声明类,后面紧跟类名:
class Runoob //类名是Runoob
{
//大括号内是类体构成
}
我们也可以定义一个空类:
class Empty
可以在类中定义成员函数:
class Runoob()
{
fun foo(){println("Foo")} //成员函数
}
类的属性
属性定义
类的属性可以用关键字var声明为可变的,否则使用只读关键字val声明为不可变。
class Runoob
{
var name:String="Mike"
var url:String="www.baidu.com"
var city:String="beijing"
}
我们可以像使用普通函数那样使用构造函数创建类实例:
val site=Runoob() //Kotlin中没有new关键字
要使用一个属性只要用名称引用它既可
site.name //使用 .号引用
site.url
Kotlin中的类可以有一个主构造器以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后:
class Person constructor(name:String){}
如果主构造器没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略。
class Person(name:String){}
主构造器
主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用init关键字作为前缀。
class Person construcotr(name:String)
{
init
{
System.out.println("name is $name")
}
}
次构造器
类也可以有二级构造器,需要加前缀constructor
class Person(val name:String)
{
constructor(name:String,age:Int):this(name){}
}
抽象类
抽象类是面向对象编程的特征之一,类本身或类中的部分成员,都可以声明为abstract的。抽象成员在类中不存在具体的实现。
注意:无需对抽象类或抽象成员标注open注解
open class Base
{
open fun f() {}
}
abstract class Derived : Base()
{
override abstract fun f()
}
嵌套类
我们可以把类嵌套在其他类中,看以下实例:
class Outer
{ // 外部类
private val bar: Int = 1
class Nested {// 嵌套类
fun foo() = 2
}
}
fun main(args: Array<String>)
{
val demo = Outer.Nested().foo() // 调用格式:外部类.嵌套类.嵌套类方法/属性
println(demo) // == 2
}
内部类
内部类使用 inner 关键字来表示。
内部类会带有一个对外部类的对象的引用,所以内部类可以访问外部类成员属性和成员函数。
class Outer {
private val bar: Int = 1
var v = "成员属性"
/**嵌套内部类**/
inner class Inner {
fun foo() = bar // 访问外部类成员
fun innerTest() {
var o = this@Outer //获取外部类的成员变量
println("内部类可以引用外部类的成员,例如:" + o.v)
}
}
}
fun main(args: Array<String>)
{
val demo = Outer().Inner().foo()
println(demo) // 1
val demo2 = Outer().Inner().innerTest()
println(demo2) // 内部类可以引用外部类的成员,例如:成员属性
}
参考:
Kotlin 类和对象