Kotlin方法重载和覆写
一、很多人分不清方法的重载和方法的覆写
覆写:override是重写父类已经存在的方法
重载:Overloads是写一个与已经存在的方法的方法名相同的方法,已经存在的这个方法可以是从父类继承的,也可以是当前类已经存在的。简单说:名称相同、参数名不同的方法。
二、看一个方法重载的例子
package net.println.kotlin.chapter4 import java.util.ArrayList /** * @author:wangdong * @description:方法重载 */ class Overloads{ //方法名相同,参数不同 //返回值不能当区分方法是否相同 //默认参数0 //给java用的话,加 @JvmOverloads fun a(int: Int = 0):Int{ return int } fun a(string: String):Int{ return string.length } } fun main(args: Array<String>) { val overloads = Overloads() val int: Int = overloads.a() val integerList = ArrayList<Int>() integerList.add(23) integerList.add(233) integerList.add(243) integerList.add(235) integerList.add(5) integerList.add(50) integerList.add(500) println(integerList) //可以有效避免java中的bug //removeAt对应的是索引 integerList.removeAt(1) //remove对应的是list的元素是5 integerList.remove(5) println(integerList) }
三、看一个方法覆写的例子
package net.println.kotlin.chapter4 /** * @author:wangdong * @description: */ /** * 一个类想要被继承,必须先open * 一个方法想要被覆写,也必须先open * open class Person{ * open fun work() } */ /**定义一个人的抽象类*/ abstract class Person(open val age: Int){ abstract fun work() } /**定义一个工程师的类,继承人的抽象类*/ class engineer(age: Int): Person(age){ override val age: Int get() = 0 //覆写方法一定要加override关键字 override fun work() { println("我在写代码") } } /**定义一个医生的类,继承人的抽象类*/ class doctor(age: Int): Person(age){ override fun work() { println("我在给病人做手术") } } fun main(args: Array<String>) { val engineer = engineer(23) engineer.work() println("工程师" + engineer.age) val doctor = doctor(45) doctor.work() println("医生" + doctor.age) }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
虚拟机字节码执行引擎
一、概述 物理机的执行引擎:直接建立在处理器、硬件、指令集和操作系统层面 虚拟机的执行引擎:由自己实现,可以自行制定指令集与执行引擎的结构体系,并且能够执行不被硬件直接支持的指令集格式。 java虚拟机的执行引擎:输入字节码文件,处理过程是字节码解析的等效过程,输出是执行结果。 二、运行时栈帧结构 栈帧:用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每个方法从调用开始至执行完成的过程都对应一个栈帧在虚拟机栈里从入栈到出栈的过程。 在编译程序代码时,栈帧需要多大的局部变量表、多深的操作数栈都已经完全确定,并写入方法表Code属性中,因此一个栈帧需要分配多少内存,不会受程序运行期数据的影响。 对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧(current stack frame),与这个 栈帧相关联的方法称为当前方法(current method)。执行引擎运行的所有字节码指令都只针对当前栈帧进行操作。 1、局部变量表 局部变量表(local var...
- 下一篇
Python函数、对象几个知识点
函数 一、参数 Python的函数参数可以定义默认值,当调用者没有提供参数时,函数在执行过程中用默认值设置该参数。 有默认值的参数必须声明在没有默认值的参数之后,例: def sum(x, y = 10): return x + y 除了按参数的声明顺序传递参数,还可以不按顺序传递命名参数,例: def sum(x, y, z) return x+y+z if __name__ == "__main__": #如下两种调用方式意义相同 sum(1,2,3) sum(z = 3, y = 2 ,x = 1) 二、变长参数 变长参数的函数:参数个数可变,类型不定的函数。 元组变长参数(*args):适用于参数数量不固定,在函数中使用这些参数时无需知道参数的名字与场合。 字典变长参数(**args):适用于参数数量不固定,在函数时使用这些参数时需要知道参数名字与场合。 #元组变长参数 def demo(message, *tupleName): for name in tupleName: print(message,name) if __name__ == "__main__": demo...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器