kotlin类的继承①(使用open关键字开启类的继承|使用open关键字开启方法重写)(代码片段)

韩曙亮 韩曙亮     2023-01-19     221

关键词:

文章目录





一、使用 open 关键字开启类的继承



Kotlin 中的类 默认都是 封闭的 , 无法被继承 , 如果要想类被继承 , 需要在定义类时 使用 open 关键字 ;

定义一个普通的 Kotlin 类 :

class Person(val name: String, val age: Int) 
    fun info() 
        println("name : $name, age : $age")
    

    fun sayHello()
        println("Hello World")
    

此时 , 如果声明一个类 , 继承 普通的 kotlin 类 , 在编译时会提示

This type is final, so it cannot be inherited from

报错信息 ;


如果使用 open 关键字 修饰 Person 类 , 则该类可以被继承 , 此时报错信息消失 ;

代码示例 :

open class Person(val name: String, val age: Int) 
    fun info() 
        println("name : $name, age : $age")
    

    fun sayHello()
        println("Hello World")
    


class Student : Person("Tom", 18)



fun main() 
    var student = Student()
    student.info()
    student.sayHello()

上述代码执行结果 :

name : Tom, age : 18
Hello World




二、使用 open 关键字开启方法重写



在 Kotlin 类的子类中 , 使用 override 关键字 重写方法 , 格式为 :

override fun 被重写的方法名(参数列表): 返回值类型 
	// 方法体

注意 , 父类中 被重写方法 必须 使用 open 关键字修饰 , 才能开启方法重写 , 否则默认情况下方法是 final 类型的 ;


如果在父类中 , 被重写的函数是普通函数 , 没有使用 open 关键字修饰 , 重写该函数就会出现如下报错 :

'sayHello' in 'Person' is final and cannot be overridden


在 父类 Person 类中 , sayHello 函数是普通函数 , 默认情况下普通函数不能被重写 , 因此报上述错误 ;

在 父类中 , 使用 open 关键字 , 开启函数重写 , 在编译时就不会进行报错 ;

正确代码示例 :

open class Person(val name: String, val age: Int) 
    fun info() 
        println("name : $name, age : $age")
    

    open fun sayHello()
        println("Hello World")
    


class Student : Person("Tom", 18)
    override fun sayHello()
        println("Hello World Tom")
    


fun main() 
    var student = Student()
    student.info()
    student.sayHello()

执行结果 :

name : Tom, age : 18
Hello World Tom

kotlin类的继承(代码片段)

...冒号后面需要调用夫类的构造器。属于单继承,使用open关键字允许继承classpackageloaderman.demoopenclassPerson(name:String)protectedvarmName:String=namefungetName():StringreturnmNamepackageloaderman.democlassson:Person("enen")fungetN():StringreturnmNamepackageloadermanimport... 查看详情

kotlin初学者继承(extend)(代码片段)

...都是封闭的,要让某个类开放继承,必须使用open关键字修饰它。注意:在Kotlin中Any类是所有类的超类在Java中Object类是所有类的超类Any超类        Any默认提供了三个函数:public open class Any         public... 查看详情

kotlin学习之路:继承(代码片段)

...的情况三.重写和重载3.1方法的重写3.2属性的重写四.super关键字4.1简单用法4.2复杂情况下的用法4.2.1子类重写方法中使用super4.2.2子类选择性调用父接口/父类的方法4.2.3子类内部类调用父类方法前言Kotlin的继承和Java的继承一样都是... 查看详情

kotlin继承

...Any不是java.lang.Object。如果一个类要被继承,可以使用open关键字进行修饰。openclassBase(p:Int)//定义基类classDerived(p: 查看详情

kotlin开发基础(代码片段)

...被复写。切记一个类想要被继承,必须用open或abstract关键字声明。示例如下;openclassperson(name:String)//必须申请为open才可以继承,classmale(name:String):Person(name)抽象类抽象类与这里与Java是一致的,通过abstract关键... 查看详情

使用“using”关键字继承基类的复制和移动构造函数

】使用“using”关键字继承基类的复制和移动构造函数【英文标题】:Inheritingcopyandmoveconstructorsofbaseclassusing"using"keyword【发布时间】:2018-03-0107:55:26【问题描述】:我想使用using关键字继承基类的复制构造函数:#include<i... 查看详情

使用“using”关键字继承基类的复制和移动构造函数

】使用“using”关键字继承基类的复制和移动构造函数【英文标题】:Inheritingcopyandmoveconstructorsofbaseclassusing"using"keyword【发布时间】:2018-08-0905:54:00【问题描述】:我想使用using关键字继承基类的复制构造函数:#include<i... 查看详情

kotlin委托

...理。Kotlin直接支持委托模式,更加优雅,简洁。Kotlin通过关键字by实现委托。类委托类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。以下实例中派生类Derived继承了接口Base所有方法,并且委托一个传... 查看详情

java使用啥关键字实现继承?

在Java语言中,使用`extends`关键字来实现继承,这种类型的继承被称为类继承(classinheritance)。继承是面向对象编程中的一种重要机制,它允许一个类继承另一个类的属性和方法,并可以扩展或重写这些属性和方法。在Java中,使... 查看详情

kotlin初学者类的修饰符(代码片段)

类的修饰符        Kotlin类的修饰符包括classModifier和accessModifierclassModifier        类属性修饰符,标示类本身特性abstract//抽象类final//类不可继承,默认属性enum//枚举类open//类可继承,类默认是final的annotation//... 查看详情

初识继承和多态

...继承父类的构造函数4.调用子类构造的时候,没有使用base关键字调用父类的指定的构造,默认调用父类的无参构造5.base关键字      base.父类的属性      base.父类 查看详情

kotlin入门(代码片段)

...) valcustomer=Customer("JoeSmith")注意Kotlin并没有 new 关键字。 继承在Kotlin中所有类都有 查看详情

类的继承

...。Java语言中子类对父类的继承通过在子类定义时,使用关键字extends来实现的。格式;classsubClassNameextendssuperClassName[]{........}在同一个包内,可以访问父类不是private成员变量和方 查看详情

kotlin扩展函数①(扩展函数简介|为any超类定义扩展函数|private私有扩展函数|泛型扩展函数|标准函数let函数是泛型扩展函数)(代码片段)

...改原有类的情况下增加类的功能;Kotlin中如果类没有被open关键字修饰,则该类不能被继承,如果想要扩展该类,可以使用扩展函数;扩展函数可以作用于自定义的类,也可以作用于系统自带的类,如String,List,等标准 查看详情

kotlin类与继承

类Kotlin使用class关键字声明类,类声明由类名、类头(指定其类型参数、主构造函数等)和由大括号包围的类体组成。类头和类体都是可选的,如果一个类没有类体大括号可省略class NoBody类的构造函数一类可以有一个主构造... 查看详情

继承多态封装

...子类不能使用,在子类访问父类的构造方法需要用到super关键字,一般super放在mian方法的第一行,并且只要继承,系统会默认调用父类的无参构造方法。并且如果是连续继承,无参构造方法会从最上面层的父类开始调用。如果调... 查看详情

4.6类的继承(代码片段)

...限定四、调用父类的构造器一、继承的特点??Java继承通过关键字extends关键字来实现,实现继承的类被称为子类,被继承的类称为父类,有时也成为基类、超类。父类和子类是一种特殊的关系。因为子类是一种特殊的父类,因此... 查看详情

10.1类的继承(代码片段)

1、在JAVA中使用extends关键字来表示两个类的继承关系。2、a、子类可以使用spuer()语句调用父类中的构造方法;   b、子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public或protected成员方法。3、... 查看详情