这一节我们学习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的属性。

我们发现上面的代码没有gettersetter方法,其实Kotlin默认为我们生成了,只是不需要显式写出来而已。

同时还有几点需要注意

1 . Kotlin为var变量默认生成gettersetter方法,功能与Java的gettersetter方法一致。

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代码中没有gettersetter方法,但是在Java代码中可以直接调用gettersetter代码。

注意: 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系列之类和属性相关推荐

  1. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)

    简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...

  2. Kotlin系列之集合和函数式API完全解析-上篇

    简述: 今天带来的是Kotlin浅谈系列的第八讲,这讲我们一起来聊聊Kotlin这门语言对函数式编程的支持.我们都知道在kotlin这门语言中函数荣升成为了一等公民,所以在支持函数式编程的方面,Kot ...

  3. Kotlin系列之基础语法

    标签: Kotlin      Kotlin基础语法 目录: 一.包的声明 二.函数的定义 三.常量和变量 四.注释 五.字符串模板 六.使用条件表达式 七.NULL检查机制 八.类型检测以及自动类型 ...

  4. Kotlin系列之Lambda编译成字节码过程完全解析

    简述: 今天带来的是Kotlin浅谈系列第七弹,上篇博客我们聊到关于Kotlin中的lambda表达式的一些语法规则和基本使用.然而我们并没有聊到Kotlin的lambda表达式的本质是什么?我们都知 ...

  5. [译]Effective Kotlin系列之考虑使用原始类型的数组优化性能(五)

    翻译说明: 原标题: Effective Kotlin: Consider Arrays with primitives for performance critical processing 原文地 ...

  6. Kotlin系列之let、with、run、apply、also函数的使用

    标签: Kotlin      常用技巧 目录: 一.回调函数的Kotin的lambda的简化 二.内联扩展函数之let 三.内联函数之with 四.内联扩展函数之run 五.内联扩展函数之apply ...

  7. kotlin中继承父属性使用构造方法

    kotlin中继承父属性使用构造方法 1. 定义父类,给它两个属性: abstract class AbstractResponseMessage {private var success = tru ...

  8. kotlin学习笔记——委托属性

    委托属性 kotlin提供了将属性委托到一个类的方法,就是委托属性. 当我们使用属性的get和set方法时,属性委托的getValue和setValue就会被调用. 属性委托的结构如下: class ...

  9. Kotlin 系列(二) 基本语法(1)

    属性与变量 Kotlin 类中的属性,既可以使用关键字 var 声明为可变的,也可以用 val 声明为只能赋值一次的只读变量. 变量 /** *只读变量 */ val a: Int = 1 //立即赋 ...

最新文章

  1. MWC 2015:Peel全面升级为用户打造智能家居控制新体验
  2. Flume向HDFS写数据实例
  3. nfs服务启动失败:Failed to start NFS status monitor for NFSv2/3 locking..
  4. html body 边框,html – 如何在表的tbody / thead部分创建边框?
  5. 如何将多个文件捆绑成一个可执行文件
  6. java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
  7. [SharePoint教程系列] 0.SharePoint 2016介绍
  8. 各种编程技术资料分享
  9. Win10WIFI链接不上||无线网卡错误代码56
  10. 物理:相量代数式和相量极坐标式的互相转换
  11. 使用uvm_report_catcher屏蔽掉特定的uvm_error/uvm_warning
  12. access的否定形式_雅思考试对于新手有多难?
  13. 【C语言程序设计】基本算术运算
  14. 最大似然估计总结笔记
  15. java加密常用的方法_java中常用接口对接加密方式
  16. 微信小程序选择图片(相册中选择/相机拍摄)
  17. 任何行业都能用上的名词(用于提升逼格)
  18. 如何画圆角矩形 c代码
  19. VScode安装教程,十分详细!(windows版本)
  20. 操作系统进程状态和状态转换详解

热门文章

  1. python写入html文件带样式,使用pandas将数据帧写入html时应用样式映射
  2. mysql dump 查看器_mysql备份之mysqldump工具
  3. 电脑前面的插孔没声音怎么设置_手机没声音是怎么回事
  4. 线性表adt的c语言表达,抽象数据类型定义(ADT)
  5. oracle 前导列_通过 PL/SQL Developer (Oracle)-数据库(26)
  6. RecyclerView优秀文集
  7. java语言提供结构_java学习之语句结构
  8. arp 项删除失败: 请求的操作需要提升。_ccna必懂篇-arp协议工作原理详解。
  9. vue解决线上跨域的问题_vue前后端分离解决跨域问题
  10. 计算机网络日,《计算机网络原理》教学日历[汇编].pdf