从零开始学Kotlin基础篇系列文章

Kotlin中的超类Any

  • Kotlin 中所有类都继承超类 Any 类
   class demo6 //默认继承超类Any
class demo6 : Any()
  • Any类有三个默认的函数
    override fun equals(other: Any?): Boolean {
return super.equals(other)
} override fun hashCode(): Int {
return super.hashCode()
} override fun toString(): String {
return super.toString()
}
  • 如果一个类想被其他类继承,使用open关键字修饰
    open class BaseClass (name:String) {//基类
}
class Demo6: BaseClass("SiberiaDante") {//继承基类
}

类的构造函数的继承

  • 如果子类有主构造函数,则基类必须在主构造函数中立即初始化。
    open class Person(var name : String, var age : Int){// 基类
}
class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age)
  • 如果子类没有主构造函数,则必须在每一个二级构造函数中用 super 关键字初始化基类,或者在代理另一个构造函数。初始化基类时,可以调用基类的不同构造方法。
    open class Person(name: String) {
constructor(name: String, age: Int) : this(name)
} class Student : Person {
constructor(name: String) : super(name)//调用基类主构造
constructor(name: String, age: Int) : super(name, age)//调用基类次级构造
}

类中方法的重写

  • 使用fun声明函数时默认为final修饰,不能被子类重写。如果基类允许子类重写该函数,则需要使用 open 关键字修饰, 子类重写方法使用 override 关键词:
    open class Person { //基类
fun man() {//不允许子类重写的方法
print("男人")
}
open fun women() {//允许子类重写方法
print("女人")
}
}
class Gender : Person() {//子类
override fun women() {//重写父类方法
// super.women()
}
}

类中属性的重写

  • 属性的重写必须具有兼容类型,重写使用 override 关键字,每一个声明的属性都可以通过初始化程序或者getter方法被重写
    open class BaseColor() {
open val red: String = "Red"//基类可重写的属性
} class redColor : BaseColor() {
override val red: String="Red1"//重写基类属性
override val red: String//重写基类属性
get() = super.red
}
  • 可以var属性重写val属性,但不能用val属性重写var属性。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
    open class BaseColor() {
open val red: String = "Red"//基类可重写的属性
} class redColor : BaseColor() {
override var red: String="Red1"//重写基类属性
override var red: String//重写基类属性
get() = super.red
}

最新文章

  1. 简单易懂的Activity四种启动模式
  2. IHTMLDocument2
  3. sql2008备份集中的数据库备份与现有的xxx数据库不同解决方法
  4. http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315436.html
  5. javascript高级编程笔记01(基本概念)
  6. OpenSSH ‘mm_newkeys_from_blob’函数权限许可和访问控制漏洞
  7. Fedora 18 安装前指南
  8. 使用C语言获取当前系统的时间
  9. socket(TCP)发送文件
  10. datazen logo修改
  11. Android高清巨图加载方案
  12. 纯CSS3美化单选按钮radio
  13. (转)JVM工作原理和流程
  14. 模板引擎(smarty)知识点总结三
  15. Linux安装rar
  16. Unable to find utility "instruments", not a developer tool or in PATH
  17. 【计算机网络】OSI七层模型图解
  18. 性能测试day06_需求设计的学习(性能重中之重,思维方向永远重于工具)
  19. Python 文件 writelines() 方法
  20. HTML5标签canvas制作动画

热门文章

  1. 【转】DHCP工作过程详解
  2. Hello Shader之Hello Trangle
  3. Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人
  4. php初进一个项目组,使用几个函数帮忙熟悉流程
  5. BZOJ3786: 星系探索 Splay+DFS序
  6. c# thread pause example
  7. MVVM Light Toolkit使用指南
  8. VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。
  9. TMS320VC5509片内ADC采集
  10. 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面