分享下学习Kotlin的历程-访问作用域/类修饰词/继承
来源:互联网 发布:网络模式怎么设置 编辑:程序博客网 时间:2024/06/06 16:37
转载请注明出处:王亟亟的大牛之路
开篇之前还是老规矩,先安利https://github.com/ddwhan0123/Useful-Open-Source-Android 还是尽量每天做更新和维护
java中访问作用域与继承等姿势很好的对我们的代码进行了封装,那么Kotlin中又是如何定义的呢?
这一篇,通过一个简单的demo来讲一下相关知识
访问作用域
访问作用域也叫访问权限修饰符
通过修饰符来控制类、属性和方法的访问权限和其他功能
首先是Java的
其次是Kotlin的
与Java的区别在于,Kotlin默认的修饰词是public
他们的区别,待会会在Demo中解释
类属性修饰符
除了注解类,其他都是老面孔,在网上搜到了不错的注解类的中文博文,直接 分享给大家:http://www.jianshu.com/p/d3721b171e9f
继承
在类的构造函数之后使用 : 标示继承
class 子类(子类的构造函数所需的参数和类型):父类(子类的构造函数所需的参数){}
当类未声明构造函数时,继承其他类时,也不需要在primary constructor中显示的声明构造函数,必须在secondary constructor中显示调用父类构造函数,若父类有多个构造函数,可选择其一进行调用
所有类定义时默认是final属性,不可被继承。若需要继承,使用open关键字进行修饰。
ok,大道理讲完了,我们来看下demo
首先,我们“强行给Activity“封装个基类叫BaseActivity
,然后写了一系列的方法
BaseActivity.kt
abstract class BaseActivity(value: String) : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(getLayoutID()) init() setListener() Log.d("--->", "BaseActivity onCreate") } //父类的抽象方法,给子类去实现 abstract fun getLayoutID(): Int abstract fun init() abstract fun setListener() override fun onResume() { super.onResume() Log.d("--->", "BaseActivity onResume") } override fun onStart() { super.onStart() Log.d("--->", "BaseActivity onStart") } override fun onPause() { super.onPause() Log.d("--->", "BaseActivity onPause") } override fun onStop() { super.onStop() testPrivate() Log.d("--->", "BaseActivity onStop") } override fun onRestart() { super.onRestart() Log.d("--->", "BaseActivity onRestart") } override fun onDestroy() { super.onDestroy() Log.d("--->", "BaseActivity onDestroy") } //方法默认是final的,不可被子类重载,若需要被重载,使用关键词 open 进行修饰 open fun showToast(context: Context, msg: String, time: Int) { Toast.makeText(context, msg, time).show() Log.d("--->", "BaseActivity showToast") } //获取appVersionName,子类无法调用 protected fun showAppVersionName(cotext: Context): String { var versionName = "" try { val pm: PackageManager = cotext.packageManager val pi: PackageInfo = pm.getPackageInfo(cotext.packageName, 0) versionName = pi.versionName if (versionName == null) { return "" } } catch (e: Exception) { Log.e("VersionInfo", "Exception", e) } return versionName } //子类无法调用 private fun testPrivate() { Log.d("--->", "testPrivate") } //子类可以使用 public fun getMyPackageName(context: Context): String { return context.packageName }}
SecondActivity.kt
//这里只是随便写了个构造函数class SecondActivity : BaseActivity("") { //对onCreate方法进行了拆分,这里会返回布局ID override fun getLayoutID(): Int { return R.layout.activity_second } //对onCreate方法进行了拆分,这里可以做简单对初始化操作 override fun init() { Log.d("--->", "SecondActivity init") Log.d("--->", "getMyPackageName " + getMyPackageName(this)) } //对onCreate方法进行了拆分,这里可以设置各种监听 override fun setListener() { Log.d("--->", "SecondActivity setListener") } override fun onResume() { super.onResume() Log.d("--->", "SecondActivity onResume") showToast(this, "我是第二页的 Toast", 1) } override fun onPause() { super.onPause() Log.d("--->", "SecondActivity onPause") } //重载了父类的showToast方法 //子类重载方法使用 override 关键词 override fun showToast(context: Context, msg: String, time: Int) { Log.d("--->", "SecondActivity showToast 被重写 ") Log.d("--->", " VersionName " + showAppVersionName(this)) }}
因为Kotlin和java紧密贴合,所以你继承java类和继承Kotlin类几乎无多余操作,简单快捷,接下来一段时间还会深入学习了解
源码地址:https://github.com/ddwhan0123/KotlinAndroidDemo
阅读全文
1 0
- 分享下学习Kotlin的历程-访问作用域/类修饰词/继承
- 分享下学习Kotlin的历程-环境/简单使用
- 分享下学习Kotlin的历程-变量/数据类型(1)
- 分享下学习Kotlin的历程-数据类型(2)
- 分享下学习Kotlin的历程-构造函数/抽象类/枚举
- 分享下学习Kotlin的历程-开始写逻辑吧 if/for/while/when
- 继承情况下的类作用域
- 多重继承下的类作用域
- 继承情况下类的作用域
- 包和修饰词的作用
- java的访问权限修饰词
- Java的访问权限修饰词
- C++学习笔记52——继承情况下类的作用域
- C++ Primer 学习笔记_69_面向对象编程 -继承景况下的类作用域
- Idea下kotlin的抽象类和继承,多态
- kotlin的类与继承
- Kotlin中类的继承
- Idea下Kotlin的封装和继承
- 四、Jenkins系列_配置邮件服务及简单Demo
- svm-loss 关于权重矩阵W的导数(cs231n Assignment 1)
- 子类重写父类方法后的调用规则
- 常用jar包作用
- FTPrep, 61 Rotate List
- 分享下学习Kotlin的历程-访问作用域/类修饰词/继承
- 后知后觉
- iOS学习笔记-140.RunLoop08——Runloop应用之常驻线程
- 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付
- ITIL 服务可用性管理流程关键知识
- FTPrep, 62 Unique Paths
- 加盐加密
- FTPrep, 63 Unique Paths II
- 虚拟货币钱包