Kotlin学习(3)类
声明类和接口:
//类
class A{ } //接口,接口中的方法可以有默认实现
interface B{
fun show(){ print("i'm B") }
} //用冒号代替extends和implements,可以实现多个接口,只能继承一个类
class C:A,B{ } //带参数且有继承的类,参数如果带val,即这个参数在类中默认被初始化,如果不带,这个参数需要在类中自己初始化
class D(val d:Int):A{ }
class D(_d:Int){ private val d=_d }
//从构造方法
class D{ constructor(d:Int){ //..... } }
//带默认参数的类
class E(val e:Int=){ fun re(){ println(e)} }
>>>E().re()
//打印6
>>>E().re()
//打印5
>>>E().re()
//打印5 //继承的接口拥有同名方法,如F/G接口都有show()方法,则必须重写这个方法,或者指定用哪一个接口方法
class H:F,G{
override fun show(){
//下面的写法会同时调用f和g的show方法
super<F>.show()
super<G>.show()
}
} //抽象类
abstract class I{
//抽象函数,没有实现方法,必须被子类重写
abstract fun i() //抽象类中的方法默认是open的,但也可以标注
open fun i2(){ }
}
类中访问修饰符:
| 修饰符 | 相关成员 | 评注 |
| final | 不能被重写 | 类中成员默认使用 |
| open | 可以被重写 | 需要明确的表明 |
| abstract | 必须被重写 | 只能在抽象类中使用;抽象成员不能有实现 |
| override | 重写父类或接口中的成员 | 如果没有使用final表明,重写的成员默认是open的 |
可见性修饰符:
| 修饰符 | 类成员 | 顶层声明 |
| public(默认) | 所有地方可见 | 所有地方可见 |
| internal | 模块中可见 | 模块中可见 |
| protected | 子类中可见 | ----- |
| private | 类中可见 | 文件中可见 |
getter和setter:
可以自定义gtter和setter方法,在每次设置和得到属性之前做一些操作
//每次set都会输出11111
class A{
vae a:String="aaaa"
set(value:String){
println("")
a=value
}
}
数据类:
data class Client(val name:String, val postalCode:Int) ,这行代码生成了一个数据类。这个类会自动生成equals() toString() HashCode() 等方法。
Object关键字:
这个关键字定义一个类并同时创建一个实例。也就是说,当你定义了这个类,它就已经被声明了。
可以用来创建单例。(单例和顶层函数都是为了可以全局访问,单例的好处是可以继承或实现一些类或接口,可以子类重写方法等)
Object A(){
val a1="aaa"
fun a2(){
pintln("aaaaaaa")
}
}
//不用A(), A()实际上相当于Java中new了一个新的对象
>>>A.a1
>>>A.a2()
伴生对象:工厂方法:
Kotlin中并没有static关键字,而是使用顶层函数来使函数被全局访问。但是顶层函数不能访问类的private属性。为了解决这个问题,可以使用工厂方法来替代static。
class A{
companion object(){
fun bar(){
println("it is companion object")
}
}
}
>>>A.bar()
it is companion object
Kotlin学习(3)类的更多相关文章
- kotlin学习(二)——类
Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Kotlin学习快速入门(3)——类 继承 接口
类 参考链接 类定义格式 使用class关键字定义,格式如下: class T{ //属性 //构造函数 //函数 //内部类 } Java Bean类 java bean类 //java bean类 ...
- Kotlin学习第一课:从对比Java开始
1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...
- kotlin 学习感受
目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...
- Kotlin 学习笔记(一)
(Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...
- Kotlin学习快速入门(7)——扩展的妙用
原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...
- Java虚拟机JVM学习07 类的卸载机制
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...
- Java虚拟机JVM学习04 类的初始化
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
随机推荐
- 最简单的注册美区Apple ID方法
最简单方法注册苹果美区Apple ID 1.打开苹果官网链接 苹果官网 2. 点击右下角的 United States 3. 点击图片中的选项 4.点击右上角的选项创建新的Apple ID 注意是新的 ...
- unittest-mock-from-import
https://stackoverflow.com/questions/11351382/mock-patching-from-import-statement-in-python
- 前端面试题常考&必考之--跨域的解决办法
1.为啥出现跨域??? 在制定Html规则时,为了安全的考虑,一个源的脚本(网页,网站)不能与另一个源的资源进行交互, 所以就引发一个词叫做“同源策略”. 同源策略:同源策略是一种约定,它是浏览器最核 ...
- Java——容器(Interator)
[Interator接口] <1> 所有实现了Collection接口的容器类都有一个interator方法用以返回一个实现了Interaor接口的对象. <2> Inte ...
- codeforces 819B - Mister B and PR Shifts(思维)
原题链接:http://codeforces.com/problemset/problem/819/B 题意:把一个数列整体往右移k位(大于n位置的数移动到数列前端,循环滚动),定义该数列的“偏差值” ...
- 货币系统 Money Systems
母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,,, 或 ,, 和 100的单位面值组成的. 母牛想知道有 ...
- es之java搜索文档
1:搜索文档数据(单个索引) @Test public void getSingleDocument(){ GetResponse response = client.prepareGet(" ...
- Taylor Swift -《Fearless》
最近网上都搜不到Taylor的歌了,分享一张love best的album给大家,支持霉霉的还是去买正版把~ 专辑曲目: 01. “Jump Then Fall” 03:5702. “Untoucha ...
- 微信小程序 form 组件
表单组件:将组件内用户输入的 <switch> <input> <checkbox> <slider> <radio> <picker ...
- redux源码浅入浅出
运用redux有一段时间了,包括redux-thunk和redux-saga处理异步action都有一定的涉及,现在技术栈转向阿里的dva+antd,好用得不要不要的,但是需要知己知彼要对react家 ...