Local Classes
Classes in functions.
Local Classes is a free Kotlin Academy lesson on CoddyKit. This is lesson 4 of 4. Any 3 lessons of this learning path are free to read in full — after that, CoddyKit PRO unlocks every lesson, plus hands-on practice with a built-in code editor and a 24/7 AI tutor. It is part of the Kotlin Academy learning path, and your progress syncs across the web and the CoddyKit app. The Kotlin Academy course includes 4 lessons in total.
Classes in Functions
Kotlin lets you declare a local class inside a function body. It is visible only within that function.
fun main() {
class Greeting(val text: String) {
fun show() = println(text)
}
Greeting("Hello local").show()
}Scoped to the Function
A local class cannot be used outside the function where it is declared, keeping helper types tightly contained.
fun build(): String {
class Builder {
fun make() = "built"
}
return Builder().make()
}
fun main() {
println(build())
}Capturing Local Variables
Like closures, local classes can capture variables from the enclosing function.
fun main() {
val prefix = ">> "
class Logger {
fun log(msg: String) = println(prefix + msg)
}
Logger().log("started")
}Multiple Instances
You can create as many instances of a local class as you like within the function.
fun main() {
class Point(val x: Int)
val a = Point(1)
val b = Point(2)
println(a.x + b.x)
}Local Class with Methods
Local classes are full classes: constructors, properties, and methods all work.
fun main() {
class Account(var balance: Int) {
fun deposit(n: Int) { balance += n }
}
val acc = Account(100)
acc.deposit(50)
println(acc.balance)
}Why Use a Local Class?
Use one when a helper type is only meaningful inside a single function, avoiding cluttering the file with top-level types.
fun parseLine(line: String): Int {
class Token(val value: String)
val tokens = line.split(",").map { Token(it) }
return tokens.size
}
fun main() {
println(parseLine("a,b,c"))
}Capturing Mutable State
A local class may modify captured mutable variables from its enclosing scope.
fun main() {
var total = 0
class Adder {
fun add(n: Int) { total += n }
}
val a = Adder()
a.add(5)
a.add(7)
println(total)
}Implementing Interfaces Locally
Local classes can implement interfaces, useful when you need a named, reusable implementation inside one function.
interface Step { fun run(): String }
fun main() {
class First : Step {
override fun run() = "first"
}
println(First().run())
}Local vs Anonymous
Choose a local class when you need a name (to create multiple instances or reference the type). Choose an anonymous object for a single inline instance.
fun main() {
class Repeater(val times: Int) {
fun run() = "x".repeat(times)
}
println(Repeater(3).run())
}Nesting Inside Loops
A local class can even be declared inside blocks like loops, scoped to that block.
fun main() {
for (i in 1..2) {
class Tag(val id: Int)
println(Tag(i).id)
}
}A Practical Helper
Local classes shine for short-lived domain helpers used by exactly one function.
fun report(values: List<Int>): String {
class Stats(val sum: Int, val max: Int)
val s = Stats(values.sum(), values.max())
return "sum=${s.sum} max=${s.max}"
}
fun main() {
println(report(listOf(3, 7, 2)))
}Quick Check
Test your understanding of local classes.
Recap
You learned about local classes:
- Declared inside a function and scoped to it.
- Can capture (and modify) enclosing local variables.
- Full classes: constructors, properties, methods, interfaces.
- Use a local class when you need a name; an anonymous object for a single inline instance.
fun main() {
val tag = "L"
class C { fun show() = tag }
println(C().show())
}Learn Kotlin with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 51
- Lessons
- 203
Frequently Asked Questions
Is the “Local Classes” lesson free?
Yes — any 3 lessons of the Kotlin Academy learning path, including “Local Classes”, are free to read in full here on the web. After that, CoddyKit PRO unlocks every lesson, plus interactive practice with a built-in code editor and a 24/7 AI tutor. The Kotlin Academy course includes 4 lessons in total.
What will I learn in “Local Classes”?
Classes in functions. You practise Kotlin Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Kotlin Academy?
No prior experience is required. Kotlin Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 4 of 4.
How long does the “Local Classes” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Kotlin Academy lesson?
Yes. Every Kotlin Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Nested Classes
- Inner Classes
- Anonymous Objects
- Local Classes