A nested class is a class defined inside another class without the <code>inner</code> keyword. It does not hold a reference to the outer class.
Click to reveal answer
beginner
What is an inner class in Kotlin?
An inner class is a class defined inside another class with the <code>inner</code> keyword. It holds a reference to an instance of the outer class and can access its members.
Click to reveal answer
beginner
How do you declare an inner class in Kotlin?
Use the <code>inner</code> keyword before the class name inside the outer class. For example:<br><pre>class Outer {
inner class Inner {
fun greet() = "Hello from Inner"
}
}</pre>
Click to reveal answer
intermediate
Can a nested class access members of the outer class directly?
No, a nested class cannot access members of the outer class directly because it does not hold a reference to the outer class instance.
Click to reveal answer
intermediate
How can an inner class access the outer class members?
An inner class can access outer class members directly because it holds a reference to the outer class instance. You can also use <code>this@Outer</code> to refer to the outer class explicitly.
Click to reveal answer
Which keyword makes a class inside another class hold a reference to the outer class in Kotlin?
Astatic
Bnested
Couter
Dinner
✗ Incorrect
The inner keyword makes the nested class hold a reference to the outer class instance.
Can a nested class in Kotlin access the outer class's properties directly?
ANo, never
BOnly if marked inner
CYes, always
DOnly if outer class is static
✗ Incorrect
A nested class without the inner keyword cannot access outer class properties directly.
How do you create an instance of an inner class in Kotlin?
Aval inner = Outer.Inner()
Bval inner = Outer().Inner()
Cval inner = Inner()
Dval inner = new Outer.Inner()
✗ Incorrect
You must create an instance of the outer class first, then call Inner() on it.
What is the default nature of a nested class in Kotlin if no keyword is used?
AStatic nested class
BCompanion object
CAnonymous class
DInner class
✗ Incorrect
By default, nested classes in Kotlin are static and do not hold a reference to the outer class.
Which expression refers explicitly to the outer class instance inside an inner class?
Athis
Bsuper
Cthis@Outer
Douter.this
✗ Incorrect
Use this@Outer to refer to the outer class instance inside an inner class.
Explain the difference between inner classes and nested classes in Kotlin.
Think about how each class relates to the outer class and their access to its members.
You got /5 concepts.
Describe how to create and use an inner class instance in Kotlin.
Remember the inner class needs the outer class instance to exist.
You got /4 concepts.
Practice
(1/5)
1. What is the main difference between a nested class and an inner class in Kotlin?
easy
A. An inner class can access members of the outer class, but a nested class cannot.
B. A nested class can access members of the outer class, but an inner class cannot.
C. Both inner and nested classes can access outer class members equally.
D. Inner classes are static by default, nested classes are not.
Solution
Step 1: Understand nested class behavior
Nested classes are static by default and cannot access outer class members directly.
Step 2: Understand inner class behavior
Inner classes use the inner keyword and can access outer class members.
Final Answer:
An inner class can access members of the outer class, but a nested class cannot. -> Option A
Quick Check:
Inner class = access outer members [OK]
Hint: Inner classes use 'inner' keyword to access outer class [OK]
Common Mistakes:
Thinking nested classes can access outer members
Confusing inner classes as static
Assuming both classes behave the same
2. Which of the following is the correct syntax to declare an inner class in Kotlin?
easy
A. class Outer { class Inner { } }
B. class Outer { open class Inner { } }
C. class Outer { inner class Inner { } }
D. class Outer { static class Inner { } }
Solution
Step 1: Recall inner class syntax
In Kotlin, inner classes require the inner keyword to access outer class members.
Step 2: Check options for correct keyword
class Outer { inner class Inner { } } uses inner class Inner, which is the correct syntax.
Final Answer:
class Outer { inner class Inner { } } -> Option C
Quick Check:
Use 'inner' keyword for inner classes [OK]
Hint: Use 'inner' keyword to declare inner classes [OK]
Common Mistakes:
Omitting 'inner' keyword for inner classes
Using 'static' keyword which is invalid in Kotlin
Confusing 'open' with 'inner'
3. What will be the output of the following Kotlin code?
class Outer(val name: String) {
inner class Inner {
fun greet() = "Hello, $name"
}
}
fun main() {
val outer = Outer("Kotlin")
val inner = outer.Inner()
println(inner.greet())
}
medium
A. Hello, null
B. Hello, Kotlin
C. Compilation error
D. Hello,
Solution
Step 1: Understand inner class access
The inner class can access the outer class property name because it is declared with inner.
Step 2: Trace the code execution
Creating outer with name "Kotlin" and then inner instance calls greet() which returns "Hello, Kotlin".
Final Answer:
Hello, Kotlin -> Option B
Quick Check:
Inner class accesses outer property correctly [OK]
Assuming inner class cannot access outer properties
Expecting null or empty output
Thinking code causes compilation error
4. Identify the error in the following Kotlin code snippet:
class Outer {
class Nested {
fun printMessage() = println("Hello from Nested")
}
}
fun main() {
val nested = Outer.Nested()
nested.printMessage()
println(nested.printMessage())
}
medium
A. Calling println on a function that returns Unit causes an error.
B. Nested class cannot be instantiated without an Outer instance.
C. Nested class must be declared with 'inner' keyword to access printMessage.
D. No errors; code runs and prints correctly.
Solution
Step 1: Check nested class instantiation
Nested classes are static by default and can be instantiated without an Outer instance, so no error here.
Step 2: Analyze println usage
The function printMessage() prints a message and returns Unit. Calling println(nested.printMessage()) prints the message and then prints kotlin.Unit, which is allowed.
Step 3: Confirm no errors
There is no compilation or runtime error; the code runs and produces output as written.
Final Answer:
No errors; code runs and prints correctly. -> Option D
Quick Check:
Nested class instantiation and Unit printing both OK [OK]
5. Given the following Kotlin code, what will be the output?
class Outer(val x: Int) {
inner class Inner {
fun multiply(y: Int) = x * y
}
class Nested {
fun multiply(y: Int) = y * 2
}
}
fun main() {
val outer = Outer(5)
val inner = outer.Inner()
val nested = Outer.Nested()
println(inner.multiply(3))
println(nested.multiply(3))
}
hard
A. 15
6
B. 8
6
C. 15
9
D. Compilation error due to nested class
Solution
Step 1: Calculate inner class multiply
Inner class accesses outer property x=5, so multiply(3) returns 5*3=15.
Step 2: Calculate nested class multiply
Nested class method multiplies input by 2, so multiply(3) returns 6.
Step 3: Confirm output lines
Printing inner.multiply(3) prints 15, printing nested.multiply(3) prints 6 on next line.
Final Answer:
15
6 -> Option A
Quick Check:
Inner uses outer x, nested doubles input [OK]
Hint: Inner uses outer data; nested does not [OK]
Common Mistakes:
Assuming nested class can access outer x
Mixing up multiply results
Expecting compilation error
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.