Kotlin_面向对象_1

Kotlin

1 重载

在这里插入图片描述

fun main(args: Array<String>) {

    var 助教 = teacher()
    println("助教的等级为${助教.level},助教的薪资为${助教.salary}")
    var 讲师 = 助教++
    println("讲师的等级为${讲师.level},助教的薪资为${讲师.salary}")
    var 副教授 = 讲师++
    println("副教授的等级为${副教授.level},助教的薪资为${副教授.salary}")
}

class teacher{
    var level = 1
    var salary = 6000
    operator fun inc():teacher{
        this.level++
        this.salary += 500
        return this
    }
}

2 set/get

kotlinjava不同,get/set方法不需要那么多,可以直接调用

fun main(args: Array<String>) {
    //直接访问不需要调用get,set
    val p1 = person1()
    println(p1.age)
    println(p1.name)
}
class person1{
    var name = "张三"
    var age = 11
}

java:如果要访问或者修改私有属性的话需要有get/set方法

public class Demo02 {
    public static void main(String[] args) {
        person p1 = new person();
        p1.setName("颤三");
        System.out.println(p1.getName());

    }
}
class person{
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2.1 只读

对于kotlin来说如果属性只可以读不可以修改的话可以在下面加上private set
如果是java的话那么就直接把set的方法删掉即可

fun main(args: Array<String>) {
    //只可以获取不可以修改
    val p1 = person2()
    println(p1.name)
}
class person2{
    var name = "里斯"
    private set
    //只可以访问不可以修改了.
}

3 修改访问器

给set一个范围:有的时候如果要设置年龄的话会有约束条件

fun main(args: Array<String>) {

}
class person03{
    var name = "王五"
    var age = 30//设置一下访问的范围150一下
    set(value:Int){
        if(age < 150){//field就相当于前面的foreach的it一样是一开始就定义好了
            field = value
        }
    }
}

4 构造函数

4.1 主构造函数

kotlin的主构造器有两种表达方式:
1.init
2.直接定义

fun main(args: Array<String>) {
    var p1 = person5("里斯",11)
    println(p1.name)
    var p2 = person6("王武",22)
    println(p2.name)
}
class person5(name:String,age:Int){
    var name = ""
    var age = 0
    //init相当于java中的public person4(String name,int age)
    init {
        this.age = age
        this.name = name
    }

}
//跟上面的一个意思init,如果想改为不可修改的话改为val
class person6(var name:String,var age:Int)

java:

public class Demo05 {
    public static void main(String[] args) {

    }
}
class person4{
    private String name;
    private int age;
    public person4(String name,int age){
        name = this.name;
        age = this.age;
    }
}

4.2 次构造器

对于kotlin来说次构造器的关键字为constructor

fun main(args: Array<String>) {

}
class Person2(name:String,age: Int){
    var name = ""
    var age = 0
    var phone = ""
    init{
        this.name = name
        this.age = age
    }
    //次构造器
    constructor(name:String,age:Int,phone:String):this(name,age){
        this.phone = phone
    }
}

java:

public class Demo06 {
    public static void main(String[] args) {

    }
}
class Person1{
    String name;
    int age;
    public Person1(String name,int age){
        this.name = name;
        this.age = age;

    }
    //次构造函数
    public Person1(String name,int age,String phone){
        this(name,age);


    }
}

如果是主和次构造器的访问顺序的话肯定是先访问主构造器再访问次构造器的。

发布了151 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43141726/article/details/104525639