1,接口
//接口写法
interface onclickListener{
val name:String//属性
fun click()//抽象方法
fun text(){//实现方法
println("click text")
}
}
interface onclickLongListener{
fun click()//抽象方法
fun text(){//实现方法
println("click long text")
}
}
//类实现接口
class Button(override val name: String) : onclickListener,onclickLongListener{//实现多接口用,隔开
override fun text() {
super<onclickListener>.text()//<>中声明需要实现哪个接口的text方法
}
override fun click() {//如果只实现这个方法会报错
}
}
2,抽象类
//抽象类写法
abstract class Personal{
abstract funtext()
}
//实现抽象类
class Man : Personal(){
override funtext() {
}
}
3,类的继承
open class Button3(override val name: String) : onclickListener,onclickLongListener{
override fun text() {
super<onclickListener>.text()//<>中声明需要实现哪个接口的text方法
}
override fun click() {}//如果只实现这个方法会报错
open fun show(){}
}
class Button4(override val name:String): Button3(name){//在kotlin中,一个类默认是final,如果没有open修饰Button3,Button4将无法继承Button3
override funtext() {//可重写Button3方法
}
override funclick() {
}
override fun show(){}//在kotlin中,一个方法默认是final,如果没有open修饰show,Button4将无法重写Button3方法show
}
4,内部类
class InterClass{
companion object{
fundismiss(){
}
}
valstr="李三"
//嵌套类
class InterText{
// str. //无法拿到InterClass中属性,因为该类和Java不一样,没有隐式的引用InterClass对象
}
//内部类
inner class inner{//inner关键字声明内部类
fun test(){
str.substring(0) //已经声明为内部类,可以拿到拿到InterClass中属性
}
}
}
5,静态类
object Dialog{
fun show(){
}
}
fun main(args: Array) {
Dialog.show()
}
6,伴生类
class Associated{
companion object A{//伴生类是随着类的产生而产生的,相当于java中static类,可以在伴生类中定义静态方法或者成员属性
fun dismiss(){
}
}
}
fun AssociatedTest(args: Array) {
Associated.A.dismiss()
}
7,匿名内部类
fun main3(args: Array) {
val person =object: Personal(){
override fun text(){
}
}
//使用java中的接口
vallistener = View.OnClickListener{
}
}
8,访问控制
//public默认所有地方可见
//private类内部及同文件中可见
//protected子类内部可见
//internal模块内可见,本App可见,如果打成jar包作为依赖库,其它工程无法访问被internal修饰的类
private classp1
private classp2{
constructor(){
p1()
}
}