Kotlin编程语言入门3

四、类与对象

类就是对事物的一种封装,而类又可以拥有自己的字段和函数,字段表示该类所拥有的属性,比如说人可以拥有姓名和年龄;而函数则是表示该类可以有哪些行为,比如人可以吃饭和睡觉等


Kotlin也是使用class关键字来声明一个类的
class Person{
 var name = ""
 var age = 0
 fun eat(){
   println(name + "is eating.He is " + age + "years old.")

  }  

}


实例化对象
val p = Person()
Kotlin中实例化一个类的方式和Java是基本类似的,只是去掉了new关键字 


在main()函数中对p对象进行一些操作
fun main(){
 val p = Person()
 p.name = "Jack"
 p.age = 19
 p.eat()


这就是面向对象编程最基本的用法,就是要先将事物封装成具体的类,然后将事物所拥有的属性和能力分别定义成类中的字段和函数,接下来对类进行实例化,再根据具体的编程需求调用类中的字段和方法即可。

五、继承与构造函数 

想要让Student类继承Person类,需要做两件事:

1、第一件事,使Person类可以被继承

在Kotlin中任何一个非抽象类默认都是不可以被继承的。

在Person类的前面加上open关键字就可以:

open class Person{
...
}
加上open关键字之后,我们就是在主动告诉Kotlin编译器,Person这个类是专门为继承而设计的,这样Person类就允许被继承了

2、第二件事,要让Student类继承Person类,在Java中继承的关键字是extends,而在Kotlin中变成了一个冒号:

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

构造函数
子类有主构造函数

如果子类有主构造函数, 则基类必须在主构造函数中立即初始化。

open class Person(var name : String, var age : Int){// 基类

}

class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age) {

}

// 测试
fun main(args: Array<String>) {
    val s =  Student("Runoob", 18, "S12346", 89)
    println("学生名: ${s.name}")
    println("年龄: ${s.age}")
    println("学生号: ${s.no}")
    println("成绩: ${s.score}")
}

输出结果:

学生名: Runoob
年龄: 18
学生号: S12346
成绩: 89 
子类没有主构造函数

如果子类没有主构造函数,则必须在每一个二级构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。

class Student : Person {

    constructor(ctx: Context) : super(ctx) {
    } 

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) {
    }
}
实例:
/**用户基类**/
open class Person(name:String){
    /**次级构造函数**/
    constructor(name:String,age:Int):this(name){
        //初始化
        println("-------基类次级构造函数---------")
    }
}

/**子类继承 Person 类**/
class Student:Person{

    /**次级构造函数**/
    constructor(name:String,age:Int,no:String,score:Int):super(name,age){
        println("-------继承类次级构造函数---------")
        println("学生名: ${name}")
        println("年龄: ${age}")
        println("学生号: ${no}")
        println("成绩: ${score}")
    }
}

fun main(args: Array<String>) {
    var s =  Student("Runoob", 18, "S12345", 89)
}

-------基类次级构造函数---------
-------继承类次级构造函数---------
学生名: Runoob
年龄: 18
学生号: S12345
成绩: 89

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L.2626

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值