• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > kotlin基础教程之类和继承

kotlin基础教程之类和继承

作者:Losileeya 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Losileeya 通过本文主要向大家介绍了kotlin教程,kotlin中文教程,kotlin语言教程,kotlin android教程,kotlin视频教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

kotlin基础教程之类和继承

类声明

使用class关键字声明类,查看其声明格式:

: modifiers ("class" | "interface") SimpleName
 typeParameters?
 primaryConstructor?
 (":" annotations delegationSpecifier{","})?
 typeConstraints
 (classBody? | enumClassBody)
</div>

最简略的类声明至少包括 modifiers class SimpleName,如:

class Empty
</div>

modifiers

包括 classModifier 和accessModifier:

classModifier: 类属性修饰符,标示类本身特性。
 abstract //抽象类标示 
 final //标示类不可继承,默认属性
 enum //标示类为枚举
 open //类可继承,类默认是final的
 annotation //注解类
</div>

accessModifier: 访问权限修饰符

 private //仅在同一个文件中可见
 protected //同一个文件中或子类可见
 public //所有调用的地方都可见
 internal //同一个模块中可见
</div>

构造函数声明

可以声明一个主构造函数(primary constructor)和多个次级构造函数(secondary constructor),二者都是可选的。

primary constructor声明

作为类声明的头部存在,类声明结构:

class User constructor(name:String)
</div>

当constructor前无修饰符(如:private)时,constructor可以省略:

class User(name:String)
</div>

当是无参构造函数时,整个构造函数部分也可以省略,省略的构造函数默认是public的:

class User
</div>

primary constructor 初始化

由于primary constructor不能包含任何代码,因此使用 init 代码块对其初始化,同时可以在初始化代码块中使用构造函数的参数:

class User(name:String){
  init{
    //初始化..  
  }
}
</div>

可以类中初始化属性:

class User(name:String){
  var customName = name.toUpperCase() //初始化属性
}
</div>

secondary constructor声明

使用constructor前缀声明,且必须调用primary constructor,使用this关键字:

class User(name:String){

  /**secondary constructor**/
  constructor(name:String,age:Int):this(name){
    //初始化...
  }
}

</div>

声明构造函数时,允许指定参数默认值,若所有参数都被指定默认值然后编译,编译器会生成一个额外的无参构造函数来使用初始化属性为初始值。

class User(name:String = “”)
</div>

作为校验,上述声明方式允许如下调用:

var user = User()
var anotherUser = User("jason")
</div>

若构造函数中并非所有参数都有默认值,则不会生成默认无参构造函数:

class User(name:String = "",age = Int)
var user = User() //将无法编译通过 
var anotherUser = User("jason",18) //合法声明
</div>

实例化

无需new关键字,即可实例化对象:

var user = User()
</div>

继承(Inheritance)

Any

所有类都继承该类,提供默认的三个函数:

equals()
hashCode()
toString()
</div>

继承声明

在类的构造函数之后使用 : 标示继承:

class Student(name:String,age:Int):User(name,age){

}

</div>

当类未声明构造函数时,继承其他类时,也不需要在primary constructor中显示的声明构造函数,必须在secondary constructor中显示调用父类构造函数,若父类有多个构造函数,可选择其一进行调用:

/**用户基类**/
open class User(name:String){

  /**secondary constructor**/
  constructor(name:String,age:Int):this(name){
    //初始化
  }
}

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

  /**构造函数**/
  constructor(name:String):super(name){

  }

  /**另外一个构造函数**/
  constructor(name:String,age:Int):super(name,age){

  }
}

</div>

所有类定义时默认是final属性,不可被继承。若需要继承,使用open关键字进行修饰。

方法重载

方法默认是final的,不可被子类重载,若需要被重载,使用关键词 open 进行修饰,子类重载方法使用 override 关键词:

open class User{

  open fun study(){}

  fun run(){}
}

class Student:User{
  override fun study(){}
}

</div>

override修饰的方法,默认是可以被继承的。若希望不被继承,可以使用 final 关键词修饰。

final override fun study(){}
</div>

重载规则

当类同时继承类和实现接口,且有相同方法,且相同方法都有实现时,需要在重载方法中调用所继承的方法,使用关键词 super ,T表示所继承或实现的接口:

open class User{
  open fun study(){}
}

interface Reading{
  fun study(){}
}

class Student:User(),Reading{
  override fun study(){
    super<User>.study() 
    super<Reading>.study() //与上者至少二选其一
  }
}

</div>

当接口未实现方法时,默认为父类User的study方法,不需要调用所继承的方法:

interface Reading{
  fun study()
}

class Student:User(),Reading{
  override fun study(){
    //do nothing
  }
}

</div>

抽象类

Kotlin中的抽象类允许有abstract修饰的成员方法,非抽象类不允许有抽象方法;

abstract class User{
  abstract fun study()
}

class Person{
  abstract fun study() // 编译错误
}

</div>

抽象类默认是可被继承的,接口是特殊的抽象类,允许有抽象方法:

interface Reading{
  abstract fun reading()
}

</div>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • kotlin基础教程之类和继承
  • Kotlin教程之函数和包的定义和流程控制
  • Kotlin教程之基本数据类型
  • Kotlin 基础语法详细介绍
  • kotlin基础教程之类和继承
  • Kotlin教程之函数和包的定义和流程控制
  • Kotlin教程之基本数据类型
  • Kotlin 基础语法详细介绍

相关文章

  • 2017-05-28在Spring Boot中如何使用数据缓存
  • 2017-05-28Java Timezone类常见问题_动力节点Java学院整理
  • 2017-05-28java文件上传Demo(必看篇)
  • 2017-05-28MyBatis关于二级缓存问题
  • 2017-05-28Java微信公众平台开发(6) 微信开发中的token获取
  • 2017-05-28java中FileOutputStream中文乱码问题解决办法
  • 2017-05-28SWT(JFace)体验之GridLayout布局
  • 2017-05-28Java语言实现简单FTP软件 辅助功能模块FTP站点管理实现(12)
  • 2017-05-28java异常处理详细介绍及实例
  • 2017-05-28Java微信公众平台开发(14) 微信web开发者工具使用

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java 继承方法实例详解
    • 关于javaWeb中405错误的解决方法
    • JAVA 中解密RSA算法JS加密实例详解
    • 详解springboot + profile(不同环境读取不同配置)
    • java实现短信通信的完整教程
    • SpringBoot+Shiro学习之密码加密和登录失败次数限制示例
    • SpringMVC结合天气api实现天气查询
    • JAVA Frame 窗体背景图片,首位相接滚动代码实例
    • Java常用字符串工具类 字符串智能截取(3)
    • 详解用Kotlin写一个基于Spring Boot的RESTful服务

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有