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对 ...
随机推荐
- man clock
CLOCK(3) Linux程序员手册 CLOCK(3) 名称 时钟-确定处理器时间 简介 #include <time.h> clock_t clock(void); ...
- SQL插入字段
//SQL插入字段 String dropTable="drop table if exists test;"; String columnGid ="alter tab ...
- js设置定时器在规定的日期内替换掉页面
<script type="text/javascript"> window.onload=function(){ var myspan=document.getEle ...
- R语言预测实战(第二章--预测方法论)
2.1预测流程 从确定预测主题开始,一次进行数据收集.选择方法.分析规律.建立模型.评估效果直到发布模型. 2.2.1确定主题 (1)指标:表达的是数量特征,预测的结果也通常是通过指标的取值来体现. ...
- 基于Cesium的Web3d实现二三维室内外一体化融合
https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=3D%20Models.html 三维建模 BIM
- 洛谷P2258 子矩阵——题解
题目传送 表示一开始也是一脸懵逼,虽然想到了DP,但面对多变的状态不知从何转移及怎么合理记录状态.之(借鉴大佬思路)后,豁然开朗,于是在AC后分享一下题解. 发现数据范围出奇地小,不过越是小的数据范围 ...
- Han Xin and His Troops
Han Xin and His Troops 中国剩余定理 JAVA板子 /*中国剩余定理,根据公式需要求取大数的逆元*/ import java.math.BigInteger; import ja ...
- linux/Unix下的vim/vi指令的使用方法
概述 以下这篇文章介绍的是关于vim的使用方法,由于我本身对linux没有太多的研究,写下的这篇文章纯属是在实际中经常使用vim指令,想通过这篇文章记录下来,方便以后使用时查找方便.个人认为,对于普通 ...
- Windows下使用python3 + selenium实现网页自动填表功能
本文由博主(SunboyL)原创,转载请注明出处:https://www.cnblogs.com/SunboyL/p/11563345.html 因为工作原因,需要将xls文件的数据录入到网上.因为数 ...
- C# 防火墙操作之特定程序
将特定程序加入防火墙组,与将特定端口加入防火墙流程类似.详情见“C# 防火墙操作之特定端口”.其主要代码为: /// <summary> /// 允许应用程序通过防火墙 /// </ ...