Kotlin基础概念(一)
来源:互联网 发布:伊藤美诚 知乎 编辑:程序博客网 时间:2024/06/07 03:02
一、类和对象(Classes and Objects):
1、Kotlin定义类的关键字还是class跟Java一个样:
class MyKolin{}2.构造方法(Constructors):
*构造方法可以有主构造方法和其他的构造方法,参数的定义为
参数名:参数类型:
class person constructor(fristName:String){ }//或者省略掉constructorclass person (fristName:String){ init{ logger.info("这是在构造方法中初始化的代码 块") } //也可以定义一些初始化参数 val customerKey=name.toUpperCase()}*如果构造方法有注解或是显示的修饰,constructor关键字必须出现在构造函数中且出现在修饰符之后:
class Cutsomer public @Inject constructor (name:String){}*val和var的区别:var是为可变的数据类型,val为只读类型
class Person(val firstName: String, val lastName: String, var age: Int) {// ...}3.类的实例化(Creating instance of classes),在Kotlin中创建实例没有new这个关键字这是与Java中不同的区别:
val invoice=Invoiceval customer=Customer("EverBrilliant")4.类的成员:类中可包含构造方法(Constructors)和初始化代码块(initializer blocks)、方法(Functions)、成员变量属性(Properties)、内嵌类与内部类(Nested and Inner Classes)、对象声明(Object Declaration)。
二、继承(Inheritance):
1.所有的Kotlin类都有一个共同的超类Any,在类中没有继承的父类声明时默认的超类都是Any。Any不同于Java中的Object,在它里面没有任何的成员方法。
为了明确声明超类,把类型放在冒号后面:
open class Base(p:Int)class Derived(p:Int):Base(p)open关键字是注解于类之前与Java中final是相对的,它允许其他类继承这个类,只有在open修饰下才能被继承或是重写。
2.方法重载(Overriding Methods):在方法重载中不像Java中方法重载,Kotlin明确的注解(override)在方法重载时:
open class Base{ open fun v(){} fun nv(){} //没有open是不可被重写的}class Derived():Base(){ override fun v(){}}
open class AnotherDerived():Base(){ final override fun v(){} //在此之后不可被重写}3.属性重载:与方法重载相类似。
interface Foo{ val count :Int}class Bar1(override val count :Int):Fooclass Bar2:Foo{ override var count:Int =0}4.重载的规则:在Kotlin中实现继承的规则为如果类从直接父类继承实现同一成员,必须重载这个成员并提供实现。为了标记这个方法是从哪里继承实现的我们使用super鉴定从哪个类型名以扩符号来标记:
open class A{ open fun f(){print("A")} fun a(){print("a")}}interface B{ fun f() {print("B")} //接口的成员默认是open fun b(){print("b")}}class C():A(),B{ override fun f(){ super<A>.f() //调用A.f() super<B>.f() //调用B.f() }}5.抽象类(Abstract classes):
open class Base{ open fun f(){}}abstract class Derstract :Base(){ override abstract fun f()}6.Companion Object:
在Kotlin不像Java中类是没有静态方法,推荐包级函数去代替。
三、属性和方法(Properties and fileds):
1.属性的声明: 不定的类型用使用var关键字或者只读的使用val关键字:
class Adress{ var name:String=…… //属性的定义 val street:String=}//属性的使用fun copyAdress (adress:Adress):Adress{ val result=Adress() //创建对象Kotlin中没new result.name=address.name //使用属性}
2.声明属性的全语法:
//var 属性名:[属性类型][=初始化值][get方法][set方法]var <propertyName>[:<PropertyType>] [=<property_initializer>][<getter>][<setter>]3.在全语法中只读(read-only)属性声明不同于可变属性:*用val去修饰 *不允许有set方法。
4.备用属性(Backing Properties):隐式对属性值初始化声明避免了空指针。
private var _table:Map<String,Int>?=nullpublic val table:Map<String,Int> get(){ if(_table==null){ _table=HashMap() //参数类型是自动推导 } return _table?:thrw AssertionError("set to null by another thread") }不管是备用变量或者备用属性,都是Kotlin对于空指针的一种解决方案,可以避免函数访问私有属性而破坏它的结构 。
5.编译时常量(Compile-Time Constants):在编译时就可以知道具体的属性值可以用const修饰,也可以当做注解时使用:
const val SUBSYSTEM_DEPRECATED:String="This subsystem is deprecated"@Deprecated (SUBSYSTEM_DEPRECATED) fun foo(){ ……}6.延时初始化属性(Late-Initialized Properties):
在Kotlin中,声明为具有非空类型的属性必须在构造函数中初始化,但是往往不希望在构造函数中初始化,例如在通过依赖注入或单元测试的设置方法来初始化属性的时候,不能在构造器中提供一个非空的初始化语句,为了处理这种情况,就要在属性上加lateinit
关键字来延迟初始化
阅读全文
0 0
- Kotlin基础概念(一)
- Kotlin(一)基础
- kotlin学习(一)------基础
- Kotlin基础(一)
- Kotlin 初窥门径[1]-基础概念
- Kotlin 初窥门径[1]-基础概念
- Kotlin(一)语法基础
- Kotlin 基础语法(一)
- Kotlin基础入门(一)
- Kotlin一步一个脚印学习基础一
- kotlin基础语法(一)
- android使用kotlin开发基础(一)之 hello kotlin
- Kotlin基础(一)android studio中配置Kotlin
- Kotlin开发之旅《一》— 初学者Kotlin基础必备
- Android+Kotlin开发之Kotlin基础(一)
- Kotlin基础(一)android studio中配置Kotlin
- C# 基础概念【一】
- TestNG 一 基础概念
- python opencv错误记录
- PhotonServer初探
- 一个ResourceNotFound Exception引发的思考
- c++基础
- MyBatis 入门以及实践
- Kotlin基础概念(一)
- acm_step1.1.5
- 网站压力测试工具 Webbench
- Thinking in java-19 final、finally、finalize关键字
- muduo读书笔记01
- unlink之android中的利用
- 关于struct结构体内存分配的学习小结
- Java 8 Stream 流已被操作或关闭
- Nmap脚本文件分析(AMQP协议为例)