详解Kotlin中的面向对象(二)
作者:lqh 发布时间:2021-12-29 03:10:00
详解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.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/steveyg/article/details/72879411


猜你喜欢
- 前言本次示例代码的文件结构如下图所示。1. 导入依赖坐标在 order-service 的 pom.xml 文件中导入 Feign 的依赖坐
- 定义定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。解决的问题在有多种算法相似的情况下,
- 1、下载内嵌浏览器Jar包下载地址:点击下载2、项目下加入对应jar;然后右键:Add as Library...3、添加启动项目后事件效果
- 介绍Dubbo 是一款高性能、轻量级的 Java RPC 框架,由阿里巴巴开源并贡献至 Apache 基金会。它能够提供服务的注册与发现、负
- 关于这三个关键字之前可以研究一下原本的一些操作using System;using System.Collections.Generic;u
- java内存分析类加载的过程类的加载与ClassLoader的理解类的初始化package Collections;public class
- 来源:https://www.cnblogs.com/dato/p/7027949.html
- 简介在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需
- springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下:第一步,配置 web.xml <session
- 本文实例为大家分享了java实现员工工资管理系统的具体代码,供大家参考,具体内容如下一、题目要求设计员工工资管理系统,实现以下功能:(1)输
- 简介redis 多数据源主要的运用场景是在需要使用多个redis服务器或者使用多个redis库,本文采用的是fastdep依赖集成框架,快速
- •强引用(FinalReference),在java中,有点像C++的指针,通过引用,可以对堆中的对象进行操作。强引用具备以下特点: 1.强
- 智能终端上的游戏目前风头正劲,试问哪个智能手机上没有几款企鹅公司出品的游戏呢!之前从未涉猎过游戏开发,但知道游戏开发前要挑选一款合适的游戏引
- android绘制圆形图片的两种方式看下效果先下面有完整的示例代码使用BitmapShader(着色器)我们在绘制view 的时候 就是小学
- 0x01. 概述SpringBoot平时我们用的爽歪歪,爽到它自己连Tomcat都自集成了,我们可以直接编写SBT启动类,然后一键开启内置的
- 破解流程破解Android程序流程:反编译—>分析–>修改–>回编译–>签名,这些都是在命令行中操作,当然也有集成了
- javabean与map的转换有很多种方式,比如:1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是
- 前言本文主要给大家分享了Android仿网易新闻图片详情下滑隐藏效果的相关内容,分享出来供需要的朋友参考学习,下面话不多说了,来一起看看详细
- 你是否遇到过应用程序性能下降的问题?有没有想过提升Spring性能?如果是这样 - 那么这篇文章绝对适合你。在这里,我们将谈论使用超级强大和
- 存储过程:CREATE PROCEDURE [dbo].[Proc_GetInfo] @yw