全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Kotlin中的面向对象(二)

详解Kotlin中的面向对象(二)

在Kotlin中的面向对象(一)中,介绍了Kotlin类的相关操作,本文将在上文的基础上,继续介绍属性、接口等同样重要的面向对象的功能。

属性

class AttrDemo{ 
 private var attr1 : String = ""; 
 protected var attr2 : String = ""; 
 public var attr3 : String = ""; 
 
 var varattr : String = ""; 
 val valattr : String = ""; 
 
 var attr = 1; 
} 

属性是每个对象中最基本的单位,也是必不可少的一部分,与Java一样,Kotlin也提供了private、protected、public三种声明变量的方式,不同的是,在Kotlin中如果没声明访问权限,默认认为是public类型,即在其他任何地方都可以访问。同时,Kotlin提供了var和val用来表示属性的读写权限,var是可读写的变量,val则是只读变量,类似于Java中的final。

需要注意,Kotlin对于空安全的要求非常严格,所以对于所有的属性都需要进行初始化,因此也可以通过直接赋值的方式说明属性的类型,不一定非在后面通过冒号的方式追加。不过对于习惯Java语法的开发者而言可能还是会注明属性的类型,而习惯脚本语言的开发者可能会倾向于直接赋值。

在Kotlin中,get和set方法不是必须的,因为Kotlin会自动对get和set方法进行处理,变成直接调用属性的方式(可参考Kotlin的第一行代码中的说明),但Kotlin还是有自己独特的使用get和set的方式

private var attr1 : String 
get() = attr1.toString() 
set(value) { 
 attr1 = value 
} 
 
protected var attr2 : String 
get() { 
 //TODO GET 
 return attr2.toString() 
} 
set(value) { 
 attr2 = value 
} 

Kotlin提供了多种设置get和set的方法,上面的代码中展示了两种get方法和一种set方法,有时当你希望改变get、set的访问权限或是使用注解时,也可以直接对get、set进行操作

var attr4 : String = "" //一定要初始化 
private set 

接口

和Java类似,Kotlin使用interface作为接口的关键词,和抽象类相比,他们都可以包含抽象的方法以及方法的实现,但接口无法保存状态。

interface mInterfaceDemo{ 
 fun function1() 
 fun function2(){ 
   
 } 
} 

和继承的方式类似,实现接口也是使用冒号“:”,不过方法略有不同

class InterfaceDemoImpl : mInterfaceDemo{ 
 override fun function1() { 
  TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 
 } 
 
} 

我们可以在接口中申明属性,但接口中的属性要么是抽象的,要么提供访问器的实现。接口属性不可以有后备字段,而且访问器不可以引用它们。

泛型

泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。像 java 一样,Kotlin 中的类可以拥有类型参数

class GenericDemo<T>(t : T){ 
 var value = t 
} 

通常来说,我们需要这样构建一个对象

val generic: GenericDemo<Int> = GenericDemo<Int>(1) 

但如果类型是需要推断的,也可以通过传入忽略类型的参数进行创建

val generic = GenericDemo(1) 

嵌套类

Kotlin中的类也可以嵌套在别的类中

class Outer { 
 private val bar: Int = 1 
 class Nested { 
  fun foo() = 2 
 } 
} 

可以通过inner修饰符增加一个对外部类的引用,使得内部类可以调用外部类的属性

class Outer { 
 private val bar: Int = 1 
 inner class Inner { 
  fun foo() = bar 
 } 
} 
 
val demo = Outer().Inner().foo() //==1 

对于匿名内部类,通过对象表达式进行创建

mvp_button.setOnClickListener(object : View.OnClickListener{ 
 override fun onClick(v: View?) { 
  TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 
 } 
}); 

如果对象是函数式的 java 接口的实例(比如只有一个抽象方法的 java 接口),我们可以用一个带接口类型的 lambda 表达式创建它。

mvp_button.setOnClickListener { 
 startActivity(Intent(MainActivity@this,MVPActivity::class.java)) 
} 

枚举类

枚举类最基本的用法就是实现类型安全的枚举,每个自举常量都是一个对象。枚举常量通过逗号分开。

enum class Direction { 
 EAST,NORTH,SOUTH,WEST 
} 

因为每个枚举对象都是一个实例,所以我们可以对其进行初始化

enum class Color(val rgb: Int) { 
 RED(0xFF0000), 
 GREEN(0x00FF00), 
 BLUE(0x0000FF) 
} 

当我们需要调用枚举对象的内容时,可以通过valueof获取某个枚举对象的值,或者通过values获取所有枚举对象

Direction.EAST 
Direction.valueOf("EAST"); 
Direction.values() 

需要注意,如果指定的名字在枚举类中没有任何匹配,那么valueOf()方法将会抛出参数异常

Kotlin中核面向对象相关的内容就介绍到这里,相关的代码均提交在github中,

本文源码下载:http://xiazai./201706/yuanma/helloKotlin-master().rar

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


# Kotlin中的面向对象  # Kotlin  # 面向对象实例详解  # 详解Kotlin中的面向对象(一)  # Kotlin基础教程之面向对象  # Kotlin面向对象知识点讲解  # 关键词  # 可以通过  # 面向对象  # 都是  # 不可以  # 我们可以  # 需要注意  # 类中  # 的是  # 访问权限  # 程序设计语言  # 是有  # 将会  # 将在  # 基础上  # 则是  # 没有任何  # 两种  # 可以用  # 当你 


相关文章: 已有域名如何免费搭建网站?  如何用西部建站助手快速创建专业网站?  建站之星代理商如何保障技术支持与售后服务?  如何选购建站域名与空间?自助平台全解析  建站OpenVZ教程与优化策略:配置指南与性能提升  建站三合一如何选?哪家性价比更高?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  建站之星价格显示格式升级,你的预算足够吗?  如何自定义建站之星模板颜色并下载新样式?  如何在新浪SAE免费搭建个人博客?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何通过cPanel快速搭建网站?  建站之星好吗?新手能否轻松上手建站?  如何挑选最适合建站的高性能VPS主机?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  宝塔面板创建网站无法访问?如何快速排查修复?  如何使用Golang安装API文档生成工具_快速生成接口文档  实现点击下箭头变上箭头来回切换的两种方法【推荐】  网站制作服务平台,有什么网站可以发布本地服务信息?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何零成本快速生成个人自助网站?  制作旅游网站html,怎样注册旅游网站?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何选择最佳自助建站系统?快速指南解析优劣  如何在Ubuntu系统下快速搭建WordPress个人网站?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  网站按钮制作软件,如何实现网页中按钮的自动点击?  C#怎么创建控制台应用 C# Console App项目创建方法  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  三星网站视频制作教程下载,三星w23网页如何全屏?  专业公司网站制作公司,用什么语言做企业网站比较好?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何通过WDCP绑定主域名及创建子域名站点?  linux top下的 minerd 木马清除方法  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何在IIS中新建站点并配置端口与IP地址?  南京网站制作费用,南京远驱官方网站?  高防服务器租用指南:配置选择与快速部署攻略  视频网站制作教程,怎么样制作优酷网的小视频?  大连网站制作公司哪家好一点,大连买房网站哪个好?  建站之星安装步骤有哪些常见问题?  网站企业制作流程,用什么语言做企业网站比较好?  c# 服务器GC和工作站GC的区别和设置  如何用好域名打造高点击率的自主建站?  如何通过虚拟主机快速完成网站搭建?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。