首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin抽象类与实例

抽象类是无法实例化的类。我们创建抽象类,为其他类提供扩展和使用的通用模板。

声明一个抽象类

您可以使用abstract关键字声明一个抽象类-

abstract class Vehicle

抽象类可以包含抽象和非抽象属性和函数。您需要显式使用abstract关键字将属性或函数声明为抽象 -

abstract class Vehicle(val name: String,

val color: String,

val weight: Double) { // Concrete (Non Abstract) Properties

// Abstract Property (Must be overridden by Subclasses)

abstract var maxSpeed: Double

// Abstract Methods (Must be implemented by Subclasses)

abstract fun start()

abstract fun stop()

// Concrete (Non Abstract) Method

fun displayDetails() {

println("Name: $name, Color: $color, Weight: $weight, Max Speed: $maxSpeed")

}

}

扩展抽象类的任何子类都必须实现其所有抽象方法和属性,或者子类也应声明为抽象类。

如果您从Kotlin继承教程中回忆一下,您需要注释一个类open以允许其他类继承它。但是,您不需要使用抽象类。open默认情况下,抽象类用于扩展。

同样,open默认情况下,抽象方法和属性用于覆盖。

但是,如果需要覆盖非抽象方法或属性,则必须使用open修饰符对其进行标记。

从Abstract类扩展

以下是两个扩展Vehicle抽象类并覆盖其抽象方法和属性的具体类-

class Car(name: String,

color: String,

weight: Double,

override var maxSpeed: Double): Vehicle(name, color, weight) {

override fun start() {

// Code to start a Car

println("Car Started")

}

override fun stop() {

// Code to stop a Car

println("Car Stopped")

}

}

class Motorcycle(name: String,

color: String,

weight: Double,

override var maxSpeed: Double): Vehicle(name, color, weight) {

override fun start() {

// Code to Start the Motorcycle

println("Bike Started")

}

override fun stop() {

// Code to Stop the Motorcycle

println("Bike Stopped")

}

}

现在让我们编写一些代码来测试main方法中的抽象和具体类 -

fun main(args: Array) {

val car = Car("Ferrari 812 Superfast", "red", 1525.0, 339.60)

val motorCycle = Motorcycle("Ducati 1098s", "red", 173.0, 271.0)

car.displayDetails()

motorCycle.displayDetails()

car.start()

motorCycle.start()

}

以下是上述main()方法的输出-

# Output

Name: Ferrari 812 Superfast, Color: red, Weight: 1525.0, Max Speed: 339.6

Name: Ducati 1098s, Color: red, Weight: 173.0, Max Speed: 271.0

Car Started

Bike Started

结论

抽象类可帮助您将常用功能抽象到基类中。它可能包含抽象和非抽象属性和方法。抽象类本身是无用的,因为您无法从中创建对象。但是,其他具体(非抽象)类可以扩展它并在其基础上提供所需的功能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190731A0EVX400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券