クラスとは?
Kotlinのクラスは、オブジェクト指向プログラミングの基盤となる概念です。クラスを利用することで、データとその振る舞いをまとめて扱うことができ、コードの再利用性や保守性が向上します。
クラスの基本構文
Kotlinでは、class
キーワードを使ってクラスを定義します。
class Person(val name: String, var age: Int) {
fun introduce() {
println("My name is $name and I am $age years old.")
}
}
fun main() {
val person = Person("Alice", 25)
person.introduce()
}
この例では、Person
クラスにname
(読み取り専用)とage
(変更可能)というプロパティを定義し、introduce
メソッドを持たせています。
コンストラクタ
Kotlinのクラスには主コンストラクタ(Primary Constructor)と副コンストラクタ(Secondary Constructor)があります。
主コンストラクタ
主コンストラクタは、クラス名の後に直接定義されます。
class Car(val model: String, val year: Int)
fun main() {
val myCar = Car("Toyota", 2022)
println("Model: ${myCar.model}, Year: ${myCar.year}")
}
副コンストラクタ
副コンストラクタは、constructor
キーワードを使って定義します。
class Animal {
var name: String
var age: Int
constructor(name: String, age: Int) {
this.name = name
this.age = age
}
}
fun main() {
val dog = Animal("Buddy", 3)
println("Animal: ${dog.name}, Age: ${dog.age}")
}
副コンストラクタを使うことで、複数の初期化方法を持たせることができます。
プロパティとアクセサ
プロパティのカスタムアクセサ
Kotlinでは、プロパティにカスタムゲッターやセッターを定義することができます。
class User(val firstName: String, val lastName: String) {
val fullName: String
get() = "$firstName $lastName"
}
fun main() {
val user = User("John", "Doe")
println(user.fullName) // 出力: John Doe
}
継承と抽象クラス
クラスの継承
Kotlinのクラスはデフォルトでfinal
であり、継承可能にするにはopen
キーワードを付ける必要があります。
open class Animal(val name: String) {
open fun makeSound() {
println("Some generic animal sound")
}
}
class Dog(name: String) : Animal(name) {
override fun makeSound() {
println("Woof Woof!")
}
}
fun main() {
val dog = Dog("Buddy")
dog.makeSound() // 出力: Woof Woof!
}
抽象クラス
abstract
キーワードを使うと、インスタンス化できない抽象クラスを定義できます。
abstract class Vehicle(val name: String) {
abstract fun move()
}
class Car(name: String) : Vehicle(name) {
override fun move() {
println("$name is driving on the road")
}
}
fun main() {
val car = Car("Tesla")
car.move()
}
インターフェース
Kotlinのインターフェースは、クラスに複数の機能を持たせるために使用されます。
interface Drivable {
fun drive()
}
class Bicycle : Drivable {
override fun drive() {
println("Bicycle is moving")
}
}
fun main() {
val bike = Bicycle()
bike.drive()
}
インターフェースには、デフォルトの実装を含めることもできます。
interface Movable {
fun move() {
println("Moving...")
}
}
class Robot : Movable
fun main() {
val robot = Robot()
robot.move() // 出力: Moving...
}
データクラス
データクラスは、主にデータを保持するためのクラスで、data
キーワードを使って定義します。
data class Person(val name: String, val age: Int)
fun main() {
val person1 = Person("Alice", 30)
val person2 = Person("Alice", 30)
println(person1 == person2) // 出力: true
}
データクラスはequals
、hashCode
、toString
などのメソッドが自動的に生成されます。
シングルトンとオブジェクト
Kotlinではobject
キーワードを使うことで、シングルトンパターンを簡単に実装できます。
object Database {
fun connect() {
println("Connected to database")
}
}
fun main() {
Database.connect()
}
まとめ
本記事では、Kotlinのクラスとオブジェクト指向の基本について解説しました。Kotlinのクラスを活用することで、コードをより構造的に整理し、再利用しやすくなります。