Kotlin基础之面向对象编程

embedded/2024/9/25 4:07:47/

1. 类与对象

介绍
  • :类是对象的蓝图或模板,它定义了对象的属性和方法。
  • 对象:对象是类的实例,具有类的属性和方法。
使用
// 定义一个类
class Person {
var name: String = ""
var age: Int = 0
// 方法
fun introduce() {
println("Hello, my name is $name and I'm $age years old.")
}
}
// 创建一个对象
val person = Person()
person.name = "Alice"
person.age = 30
person.introduce() // 输出:Hello, my name is Alice and I'm 30 years old.

2. 继承与构造函数

继承介绍
  • 继承允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。
构造函数介绍
  • 构造函数用于初始化对象的状态。在 Kotlin 中,主构造函数是类头的一部分,而辅助构造函数(如果有)则使用 constructor 关键字定义。
使用
// 父类
open class Animal {
open fun sound() {
println("The animal makes a sound")
}
}
// 子类
class Dog : Animal() { // 继承自 Animal
override fun sound() { // 重写父类方法
println("The dog barks")
}
init { // 初始化块,类似于构造函数中的代码
println("Dog is initializing")
}
// 辅助构造函数
constructor(name: String) : this() { // 调用主构造函数
println("Dog's name is $name")
}
}
val dog = Dog("Buddy") // 输出:Dog is initializing 和 Dog's name is Buddy
dog.sound() // 输出:The dog barks

3. 接口

介绍
  • 接口定义了一组方法的规范,但不提供这些方法的实现。类可以实现一个或多个接口,从而承诺提供这些方法的实现。
使用
// 定义一个接口
interface Shape {
fun draw()
}
// 实现接口的类
class Circle : Shape {
override fun draw() {
println("Drawing a circle")
}
}
val shape: Shape = Circle() // 使用接口作为类型引用实现类
shape.draw() // 输出:Drawing a circle

4. 数据类

介绍
  • 数据类主要用于存储数据,它们的主要目的是提供一种简洁的方式来创建只包含数据的类。Kotlin 会自动为数据类生成一些常用方法,如 equals()hashCode(), 和 toString()
使用
data class PersonData(val name: String, val age: Int)
val personData = PersonData("Bob", 25)
println(personData) // 输出:PersonData(name=Bob, age=25)

5. 单例类

介绍
  • 单例类是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。
使用
object Singleton {
init {
println("Singleton is created")
}
fun doSomething() {
println("Singleton is doing something")
}
}
// 访问单例对象的方法
Singleton.doSomething() // 输出:Singleton is doing something

在 Kotlin 中,使用 object 关键字可以直接声明一个单例对象。这个对象在第一次被访问时创建,并且之后所有的访问都会返回这个唯一的实例。


http://www.ppmy.cn/embedded/43284.html

相关文章

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的,也非常重要,很多人忽视了这个过程。 我这里先简单写一下,后面尽量用通俗易懂的方式,举例讲解。 WebGL,全称Web Graphics Library,是一种在网页上渲染3D图形的技术。它…

无人驾驶试点——守住安全底线

最近,自动驾驶“无人化商业运营”话题很热。 先是北京亦庄自动驾驶出租车迎来无人化商业试点,将安全员从主驾移到了副驾。接着《深圳经济特区智能网联汽车管理条例》施行,明确了不同级别自动驾驶事故,特别是无人驾驶的责任主体。…

【重制版】Unity Meta Quest 一体机开发(一):前期准备,Meta XR SDK导入和环境配置,配置玩家物体

文章目录 📕教程说明📕Meta XR SDK 介绍📕前期准备⭐开启开发者模式⚡在 Meta 官网申请开发者⚡在 Meta Quest 手机 APP 开启开发者 ⭐电脑需要下载的软件⚡Meta Quest Link(以前叫做Oculus PC客户端)⚡Oculus ADB Dri…

条款9:利用destructors避免泄露资源

对指针说拜拜。承认吧,你从未真正喜欢过它,对不? 好,你不需要对所有指针说拜拜,但是你真的得对那些用来操控局部性资源(local resources)的指针说莎唷娜拉了。 举个例子,你正在为“小动物收养…

CS西电高悦计网课设——校园网设计

校园网设计 一,需求分析 所有主机可以访问外网 主机可以通过域名访问Web服务器 为网络配置静态或者动态路由 图书馆主机通过DHCP自动获取IP参数 为办公楼划分VLAN 为所有设备分配合适的IP地址和子网掩码,IP地址的第二个字节使用学号的后两位。 二…

前端开发工程师——AngularJS

一.表达式和语句 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

央视网视频下载和花屏问题处理

央视网(www.cctv.com)视频下载往往是花屏的&#xff0c;如何处理呢&#xff1f; 如果您是IT技术开发者&#xff0c;那么您可以通过下面步骤自己实现。 用chrome浏览器&#xff0c;F2打开开发者工具&#xff0c;找到当前页面的network 然后找一个接口&#xff1a;https://vdn.a…

57. UE5 RPG 处理AI敌人转向以及拾取物品的问题

在上一篇文章中&#xff0c;我们实现了使用AI行为树控制敌人进行移动&#xff0c;它们可以一直跟随玩家&#xff0c;虽然现在还未实现攻击。但在移动过程中&#xff0c;我发现了有两个问题&#xff0c;第一个是敌人转向的时候很僵硬&#xff0c;可以说是瞬间转向的&#xff0c;…