Kotlin系列之类和属性
这一节我们学习Kotlin的类和属性。
学习过Java的小伙伴对面向对象应该不会陌生吧。虽然说Kotlin支持直接在文件中写函数,但是它同样支持面向对象,下面就来了解一下Kotlin的类和属性相关的知识。
Kotlin的类
Kotlin中类的声明也是使用class
关键字,下面我们通过对你Java代码和Kotlin代码来学习。
Java代码
public class People {private final String name;public People(String name){this.name = name;}public String getName() {return name;}
}
复制代码
Kotlin代码
class People(val name: String)
复制代码
你没有看错,就是这么简洁,对于我们常用的Java 的构造函数初始化成员变量,Kotlin直接省略了代码,默认支持。同时,Kotlin中默认的可见性是public
,所以此处省略了。
Kotlin的属性
在Java中我们经常会声明一个类,表示一个实体,然后在其中声明私有属性和对应的getter和setter方法,就如下面一样。
Java代码
public class People {private String name;private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}
复制代码
我们看看Kotlin中的写法
Kotlin代码
class People {var name: String? = nullvar age: String? = null
}
复制代码
是不是很简洁,上面的代码有如下几点需要注意。
1 . var
关键字表明这个变量是可变的,也就是可以反复赋值的。
2 . 声明格式是 关键字 变量名: 变量类型
,这里还赋值为null
。
3 . ?
表示这是一个可空的属性,也就是可以为null
的属性。
我们发现上面的代码没有getter
和setter
方法,其实Kotlin默认为我们生成了,只是不需要显式写出来而已。
同时还有几点需要注意
1 . Kotlin为var
变量默认生成getter
和setter
方法,功能与Java的getter
和setter
方法一致。
2 . Kotlin为val
变量默认生成getter
方法,由于val
只能赋值一次,自然就没有setter
方法啦。
Java和Kotlin的互操作
前面的内容我们说过Kotlin是一门专注于互操作性的语言,可以与Java无缝结合。那么我们如何在Java中使用Kotlin的类呢。
Kotlin代码
class People {var name: String? = nullvar age: String? = null
}
复制代码
这是上面的代码块,下面我们先来看看在Kotlin中如何使用这个类。
fun main(args: Array<String>){val people = People();people.age = "12";people.name = "bingjianit";println(people.age + " " + people.name);
}
复制代码
输出结果
12 bingjianit
复制代码
你会发现与Java有以下几点不同
1 . 不需要new
一个对象
2 . 可以直接通过对象.属性
来取值或者赋值
下面看看上面的代码在Java中如何调用
public class Main {public static void main(String[] args) {People people = new People();people.setName("bingjianit");people.setAge("12");System.out.println(people.getName() + " " + people.getAge());}
}
复制代码
你会发现虽然Kotlin代码中没有getter
和setter
方法,但是在Java代码中可以直接调用getter
和setter
代码。
注意: Kotlin默认我我们生成的getter和setter方法的规则与Java中自动生成getter和setter的规则相同,但是当一个变量以is开头时,它的getter方法就是变量本身,setter方法是去掉is加上set前缀
。 例子
Kotlin代码
class People {var name: String? = nullvar age: String? = nullvar isRunnable: Boolean? = null
}
复制代码
Java代码
// 去掉is加上set前缀
people.setRunnable(true);
//getter方法是变量本身,没有前缀
System.out.println(people.isRunnable());
复制代码
反过来,Kotlin操作Java的类实体,也是一样的。
Java代码
public class Animal {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
复制代码
Kotlin调用代码
fun main(args: Array<String>){val animal = Animal()animal.name = "兔子"println(animal.name)}
复制代码
写在最后
这一部分我们简单了解了Kotlin面向对象的类和属性相关知识,这是我们写出结构清楚的代码的基础。
Kotlin系列之类和属性相关推荐
- [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)
简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...
- Kotlin系列之集合和函数式API完全解析-上篇
简述: 今天带来的是Kotlin浅谈系列的第八讲,这讲我们一起来聊聊Kotlin这门语言对函数式编程的支持.我们都知道在kotlin这门语言中函数荣升成为了一等公民,所以在支持函数式编程的方面,Kot ...
- Kotlin系列之基础语法
标签: Kotlin Kotlin基础语法 目录: 一.包的声明 二.函数的定义 三.常量和变量 四.注释 五.字符串模板 六.使用条件表达式 七.NULL检查机制 八.类型检测以及自动类型 ...
- Kotlin系列之Lambda编译成字节码过程完全解析
简述: 今天带来的是Kotlin浅谈系列第七弹,上篇博客我们聊到关于Kotlin中的lambda表达式的一些语法规则和基本使用.然而我们并没有聊到Kotlin的lambda表达式的本质是什么?我们都知 ...
- [译]Effective Kotlin系列之考虑使用原始类型的数组优化性能(五)
翻译说明: 原标题: Effective Kotlin: Consider Arrays with primitives for performance critical processing 原文地 ...
- Kotlin系列之let、with、run、apply、also函数的使用
标签: Kotlin 常用技巧 目录: 一.回调函数的Kotin的lambda的简化 二.内联扩展函数之let 三.内联函数之with 四.内联扩展函数之run 五.内联扩展函数之apply ...
- kotlin中继承父属性使用构造方法
kotlin中继承父属性使用构造方法 1. 定义父类,给它两个属性: abstract class AbstractResponseMessage {private var success = tru ...
- kotlin学习笔记——委托属性
委托属性 kotlin提供了将属性委托到一个类的方法,就是委托属性. 当我们使用属性的get和set方法时,属性委托的getValue和setValue就会被调用. 属性委托的结构如下: class ...
- Kotlin 系列(二) 基本语法(1)
属性与变量 Kotlin 类中的属性,既可以使用关键字 var 声明为可变的,也可以用 val 声明为只能赋值一次的只读变量. 变量 /** *只读变量 */ val a: Int = 1 //立即赋 ...
最新文章
- MWC 2015:Peel全面升级为用户打造智能家居控制新体验
- Flume向HDFS写数据实例
- nfs服务启动失败:Failed to start NFS status monitor for NFSv2/3 locking..
- html body 边框,html – 如何在表的tbody / thead部分创建边框?
- 如何将多个文件捆绑成一个可执行文件
- java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
- [SharePoint教程系列] 0.SharePoint 2016介绍
- 各种编程技术资料分享
- Win10WIFI链接不上||无线网卡错误代码56
- 物理:相量代数式和相量极坐标式的互相转换
- 使用uvm_report_catcher屏蔽掉特定的uvm_error/uvm_warning
- access的否定形式_雅思考试对于新手有多难?
- 【C语言程序设计】基本算术运算
- 最大似然估计总结笔记
- java加密常用的方法_java中常用接口对接加密方式
- 微信小程序选择图片(相册中选择/相机拍摄)
- 任何行业都能用上的名词(用于提升逼格)
- 如何画圆角矩形 c代码
- VScode安装教程,十分详细!(windows版本)
- 操作系统进程状态和状态转换详解
热门文章
- python写入html文件带样式,使用pandas将数据帧写入html时应用样式映射
- mysql dump 查看器_mysql备份之mysqldump工具
- 电脑前面的插孔没声音怎么设置_手机没声音是怎么回事
- 线性表adt的c语言表达,抽象数据类型定义(ADT)
- oracle 前导列_通过 PL/SQL Developer (Oracle)-数据库(26)
- RecyclerView优秀文集
- java语言提供结构_java学习之语句结构
- arp 项删除失败: 请求的操作需要提升。_ccna必懂篇-arp协议工作原理详解。
- vue解决线上跨域的问题_vue前后端分离解决跨域问题
- 计算机网络日,《计算机网络原理》教学日历[汇编].pdf