芬兰湾的科特林中如何实现面向对象?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>面向对象强>
面向对象的含义大家应该并不陌生,通过将事物抽象成对象,大大简化了程序的开发难度。我们常用的Java、Python、c++都属于面向对象的编程语言.Kotlin和Java很相似,也是一种面向对象的语言。作为芬兰湾的科特林中最重要的一部分,我们可以通过了解芬兰湾的科特林的OOP进而了解这门语言,本文将从类,属性,接口,对象等多个方面介绍芬兰湾的科特林的面向对象的特性。
<强>类强>
和大部分语言类似,芬兰湾的科特林使用类作为类的关键字,当我们声明一个类时,需要通过类加类名的方式实现:
类ClassDemo { }
在声明一个类的时候,至少需要包含类关键字以及后面的类名,同时也可以根据需要增加类头(用来声明一些参数)和类体(花括号{}中包含的内容,可省略)。
<强>构造函数
强>
与java不同的是,虽然都可以包含多个构造函数,但java中的各个构造函数都是平级的,而芬兰湾的科特林中却分为了两级(主构造函数和二级构造函数),主构造函数是包含在类头中的,需要在初始化方法中实现额外的操作,而二级构造函数可以在函数体中实现所有操作
//主构造函数,构造函数和初始化都可省略 类ClassDemo构造函数(类型:字符串){ init { System.out.println(类型) } }
在主构造函数中传入的参数可以在类体中为属性赋值,也可以直接在主构造函数中声明
类ClassDemo(类型:字符串,var prop2:字符串类型=){ var prop1=类型 }
二级构造函数必须包含构造函数
类ClassDemo { 构造函数(类型:字符串){ System.out.println(类型) } }
对于有主构造函数的类而言,每个二级构造函数都要,或直接或间接通过另一个二级构造函数代理主构造函数。在同一个类中代理另一个构造函数使用这个关键字:
//包含主构造函数的二级构造函数 类ClassDemo(类型:字符串){ 构造函数(类型:字符串参数:String):这个(类型){ system . out。println(类型+参数) } }
无论有没有声明主构造函数,芬兰湾的科特林都会提供一个构造函数的方法,有时可能不希望将某个类的构造函数暴露出来(比如实现单例模式时),那么就需要对主构造函数进行处理
类ClassDemo私有构造函数(){ }
当我们想创建实例时,可以直接调用对应的构造函数进行创建
=ClassDemo var演示(“你好world") val演示=ClassDemo (“hello",“world")
我们注意到,在芬兰湾的科特林中无论是声明属性还是创建实例,会有两种方式,var和val, val类似于java中的决赛,通过它声明的内容是无法变化的,而var和val相反,声明的内容既可以读取也可以修改。
<强>继承强>
在芬兰湾的科特林中,所有的类会默认继承任何这个父类,但任何并不完全等同于java中类的对象,因为它只有=(),hashCode()和toString()这三个方法。当我们想定义一个父类时,需要使用开放的关键字
{开放类基础 }
然后在子类中使用冒号”:“进行继承
类子类:基地(){ }
如果父类有构造函数,那么必须在子类的主构造函数中进行继承,没有的话则可以选择主构造函数或二级构造函数
//父类 开放类库(类型:字符串){ }//子类 类的子类(类型:字符串):基础(类型){ }
<强>重写强>
芬兰湾的科特林中的重写和java中也有所不同,因为芬兰湾的科特林提倡所有的操作都是明确的,因此需要将希望重写的方法设为打开
覆盖有趣funDemo () { super.funDemo () }
覆盖重写的函数也是开放的,如果希望它不被重写(前提是这个类可以被继承),可以在前面增加最后标签