当前位置: 首页 > news >正文

阿里云虚拟主机建网站/软文推广文章范文1000

阿里云虚拟主机建网站,软文推广文章范文1000,dede做导航网站,wordpress mysql5.7一.类和对象 1. 类 Kotlin和java的类的声明都是一样的,用class表示,比如 class TestClass {} 如果是空类的话,大括号都可以省了 2.构造函数 一个主构造函数和多个次要函数,主函数在类名后,如 class TestClass {//主函数class Test…

一.类和对象

1. 类

Kotlin和java的类的声明都是一样的,用class表示,比如

class TestClass {}

如果是空类的话,大括号都可以省了

2.构造函数

一个主构造函数和多个次要函数,主函数在类名后,如

class TestClass {//主函数class TestClass constructor(firstName: String) {init {print("这里初始化")}}
}

如果主构造函数没有任何注解或者可⻅性修饰符,可以省略这个 constructor 关键字。
并且主构造函数不允许任何代码,初始化的代码可以放在init块中

我们再来看下次构造函数

类也可以声明前缀有 constructor的次构造函数:

class Person {constructor(parent: Person) {parent.children.add(this)}
}

3.实例化类对象

Kotlin中没有new,所以直接调用

class TestClass {//主函数class TestClass constructor(firstName: String) {init {print("这里初始化")}}constructor(firstName: String) {print("次构造函数")}
}class Test{//实例化类对象val test = TestClass("lgl");
}

二.继承

所有的类都有一个超类Any,有点类似于JAVA中的Object,但是他们确是不同的,只是概念相似而已,因为Any只有有数的几个方法

这里我们定义一个基类BaseClass

 open class BaseClass {class BaseClass constructor(str:String){}}

这里的open,是公开的意思,和JAVA中的final完全相反

那我们再定义一个类去继承基类

class SonClass : BaseClass(){}

当然,括号都是可以取消的

如果类没有主构造函数,那么每个次构造函数必须使⽤ super 关键字初始化其基类型,比如我们Android中的使用

class MyView : View {constructor(ctx: Context) : super(ctx)constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
}

三.覆盖

这个很好理解,有继承就可以覆盖,我们来看一段代码

open class Base {open fun v() {print("Base...")}fun nv() {}
}class Son() : Base() {override fun v() {print("Son...")}
}fun main(args: Array<String>) {val son = Son();son.v()
}

这里有一个被open修饰的Base,里面有个Base方法,里面有打印,我现在有一个Son类,继承Base,并且override修饰重写v方法,再打印,那我的main方法,实例化这个对象后调用,打印的就是Son…了

这里写图片描述

标记为 override 的成员本⾝是开放的,也就是说,它可以在子类中覆盖,如果不想再次被覆盖,可以再修饰一个final

上面提到的是方法的覆盖,我们还可以覆盖属性,但是也是同样的,需要override修饰,比如


open class Base {open var a = 9;open fun v() {print("Base...")}fun nv() {}
}class Son() : Base() {override var a = 8;override fun v() {print("Son...")}
}fun main(args: Array<String>) {val son = Son();son.v()print(son.a)
}

在这段代码中,我们可以看到在基类中定义了一个属性a,然后子类中覆盖了一个a,输出的就是子类的a值了

如果我们想用到父类的方法,可以使用super

class Son() : Base() {override var a = 8;override fun v() {super.v()print("Son...")}
}

如果你是砸死内部类中想使用,那么需要super@Son.v()

在 Kotlin 中,实现继承由下述规则规定:如果⼀个类从它的直接超类继承相同成员的多个实现,它必须覆盖这个成员并提供其⾃⼰的实现(也许⽤继承来
的其中之⼀)。为了表⽰采⽤从哪个超类型继承的实现,我们使⽤由尖括号中超类型名限定的 super,如 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 {// 编译器要求覆盖 f():override fun f() {super<A>.f() // 调⽤ A.f()super<B>.f() // 调⽤ B.f()}
}

四.抽象类

abstract class Impl{abstract open fun f()
}class Impl1():Impl(){override fun f() {}
}

这里的open可以不声明,并且我们可以一个抽象成员覆盖一个非抽象的开放成员,如例子

    open class Base {open fun f() {}}abstract class Derived : Base() {override abstract fun f()}

五.属性和字段

我相信大家对属性应该是比较了解的,我们在第二篇的时候也已经说过

class H {var a: String = "Hello"var b: Int = 0var c: Boolean = true;
}

想要调用的话

fun main(args: Array<String>) {val h = H();print("a:${h.a}b:${h.b}c:${h.c}")
}

在kt中,get和set就比较有意思了,正确的语法是:

var <propertyName>[: <PropertyType>] [= <property_initializer>][<getter>][<setter>]

如下代码

class H {var a: Stringget() = this.toString()set(value) {a == value}var b: Int = 0val c: Boolean = true
}

我就定义了a的get和set

六.接口

kt的接口的关键字interface,比如

interface Impl {fun A()fun B() {//可选方法体}
}

如果你想实现一个接口,你可以

class Tests : Impl {override fun A() {}//B方法可以不需要实现
}

你也可以在接口中定义一些属性,但是必须是抽象的或者对外提供访问的

interface Impl {//抽象val a: Stringval b: Stringget() = "Hello"fun A()fun B() {//可选方法体}
}class Tests() : Impl {override val a: String = "Hello"override fun A() {}//B方法可以不需要实现
}

七.可见性修饰符

kt中有四种可见性修饰符,private 、protected 、internal 和 public,默认是public

  • public 随处可见

  • private 声明他的文件中可见

  • internal 相同模块可见

  • protected 不适用于顶层声明

这里还有一点需要注意的是,在JAVA中我们private中修饰的变量最终可以通过set/get的方式去访问,但是在kt中,外部类是不能访问内部类修饰的private成员

八.扩展

扩展,扩展一个类或者对象的新功能无需继承该类或使⽤像装饰者这样的任何类型的设计模式

声明一个扩展函数,我们需要一个接收者类型 也就是被扩展的类型来作为他的前缀,来看代码:

fun main(args: Array<String>) {val a = listOf<Int>()a.open(1, 2)
}

//扩展List一个open方法
fun List<Int>.open(a: Int, b: Int) {print(a + b)
}

这里就看的很清晰了,一个List本来没有open的方法,我通过扩展就给他加上了,并且内部实现了输出想加的结果
当然,我们并不会局限于哪些类型,所以通过泛型去装饰一下

//扩展List一个open方法
fun <T> List<T>.open(a: Int, b: Int) {print(a + b)
}

如果有兴趣的话,可以来Github参与一下

  • Kotlin

我的公众号,期待你的关注

http://www.lbrq.cn/news/1249633.html

相关文章:

  • 骗子会利用钓鱼网站做啥/公司网站制作模板
  • 宁德市路桥建设有限公司网站/重庆放心seo整站优化
  • 建个网站要多少钱/哪里可以接广告
  • 汕头/关键词优化排名软件流量词
  • 苹果网站做的好的点/深圳百度
  • 石家庄小学网站建设/网推什么意思
  • 网站编辑好做吗/百度网盘搜索引擎入口
  • 怎么做自己的html网站/网上商城建设
  • 做写真网站违法吗/百度官网登录入口手机版
  • 做catia数据的网站/百度浏览器
  • 怎么做网站关键字/百度首页网址是多少
  • 重庆建设注册执业中心网站/百度推广工具有哪些
  • 公司网站制做/郑州seo网站有优化
  • 做survey的网站/培训机构退费纠纷一般怎么解决
  • 江门网站设计价格/磁力搜索引擎哪个好
  • 新翼设计网站建设公司/全网营销公司排名前十
  • html5门户网站模板/济南seo培训
  • 来广营网站建设/如何优化关键词的方法
  • 推广软件app赚钱联盟/汕头seo公司
  • 传奇世界网页版在线玩/唐山seo优化
  • 常州建网站/seo怎么做最佳
  • cc域名网站需要备案吗/深圳网络运营推广公司
  • 网站源码爬取工具/常用的网络推广方法
  • 一个人注册公司怎么注册/太原seo自媒体
  • 网站建设设计作品怎么写/百度站长工具如何使用
  • 网上商城网站系统/信阳百度推广公司电话
  • 合肥网站建设-中国互联/新网站友链
  • 免费简历模板word文档/网站关键字优化公司
  • 哪个网站建设公司/自己建网站的详细步骤
  • 常用ppt模板网站/能打开的a站
  • 接入小甲鱼数字人API教程【详解】
  • 使用 Tauri 开发 Android 应用:环境搭建与入门指南
  • 008 前端vue
  • Git 乱码文件处理全流程指南:从识别到彻底清除
  • (ZipList入门笔记二)为何ZipList可以实现内存压缩,可以详细介绍一下吗
  • 2. JS 有哪些数据类型