zoukankan      html  css  js  c++  java
  • Kotlin学习(3)类

    声明类和接口:

    //
    class A{ }
    
    //接口,接口中的方法可以有默认实现
    interface B{ 
        fun show(){ print("i'm B")  }
    }
    
    //用冒号代替extends和implements,可以实现多个接口,只能继承一个类
    class C:A,B{ }
    
    //带参数且有继承的类,参数如果带val,即这个参数在类中默认被初始化,如果不带,这个参数需要在类中自己初始化
    class D(val d:Int):A{ }
    class D(_d:Int){ private val d=_d }
    //从构造方法
    class D{ constructor(d:Int){ //..... } }
    //带默认参数的类 
    class E(val e:Int=5){ fun re(){ println(e)} } 
    >>>E(6).re() 
    //打印6 
    >>>E(5).re() 
    //打印5 
    >>>E().re() 
    //打印5 
    
    //继承的接口拥有同名方法,如F/G接口都有show()方法,则必须重写这个方法,或者指定用哪一个接口方法 
    class H:F,G{ 
        override fun show(){ 
            //下面的写法会同时调用f和g的show方法 
            super<F>.show() 
            super<G>.show() 
        } 
    }
    
    //抽象类
    abstract class I{
        //抽象函数,没有实现方法,必须被子类重写
        abstract fun i()
        
        //抽象类中的方法默认是open的,但也可以标注
        open fun i2(){  }
    }

     

    类中访问修饰符:

    修饰符 相关成员 评注
    final 不能被重写 类中成员默认使用
    open 可以被重写 需要明确的表明
    abstract 必须被重写 只能在抽象类中使用;抽象成员不能有实现
    override 重写父类或接口中的成员 如果没有使用final表明,重写的成员默认是open的

    可见性修饰符:

    修饰符 类成员 顶层声明
    public(默认)  所有地方可见 所有地方可见
    internal 模块中可见 模块中可见
    protected 子类中可见 -----
    private 类中可见 文件中可见

    getter和setter:

      可以自定义gtter和setter方法,在每次设置和得到属性之前做一些操作

    //每次set都会输出11111
    class A{
        vae a:String="aaaa"
              set(value:String){
                     println("11111")
                     a=value
              }  
    }

    数据类:

       data class Client(val name:String, val postalCode:Int) ,这行代码生成了一个数据类。这个类会自动生成equals()  toString()  HashCode() 等方法。


    Object关键字:

      这个关键字定义一个类并同时创建一个实例。也就是说,当你定义了这个类,它就已经被声明了。

      可以用来创建单例。(单例和顶层函数都是为了可以全局访问,单例的好处是可以继承或实现一些类或接口,可以子类重写方法等)

    Object A(){
        val a1="aaa"
        fun a2(){
              pintln("aaaaaaa")
        }
    }
    
    //不用A(),  A()实际上相当于Java中new了一个新的对象
    >>>A.a1
    >>>A.a2()

    伴生对象:工厂方法:

      Kotlin中并没有static关键字,而是使用顶层函数来使函数被全局访问。但是顶层函数不能访问类的private属性。为了解决这个问题,可以使用工厂方法来替代static。

    class A{
        companion object(){
              fun bar(){
                     println("it is companion object")
              }
        }
    }
    
    >>>A.bar()
    it is companion object
  • 相关阅读:
    python中的递归算法
    python中的闭包函数
    python中的函数对象和函数嵌套
    python中函数与参数的简介
    python中的文件操作: 包括文件的打开方式和文件的修改
    python中元组;字典;集合的内置方法以及它们的取值方式
    python中的数字类型及内置方式;字符类型及内置方式和列表类型及内置方法
    python中的while和for循环以及break,continue结束语句。
    判断字符串以字母开头,后面可以是数字,下划线,字母,长度为6-30
    Prompt box是什么?它的返回值有什么用?
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9401445.html
Copyright © 2011-2022 走看看