Bird
Raised Fist0
Kotlinprogramming~20 mins

Inner class access to outer members in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Inner Class Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of inner class accessing outer class property
What is the output of this Kotlin code?
Kotlin
class Outer {
    val greeting = "Hello"
    inner class Inner {
        fun greet() = "$greeting from Inner"
    }
}

fun main() {
    val inner = Outer().Inner()
    println(inner.greet())
}
AHello
BError: Cannot access 'greeting' from Inner
Cfrom Inner
DHello from Inner
Attempts:
2 left
💡 Hint
Remember that inner classes have access to outer class members.
❓ Predict Output
intermediate
2:00remaining
Output when inner class shadows outer property
What will be printed by this Kotlin program?
Kotlin
class Outer {
    val value = 10
    inner class Inner {
        val value = 20
        fun printValues() {
            println(value)
            println(this@Outer.value)
        }
    }
}

fun main() {
    Outer().Inner().printValues()
}
A
10
20
B
20
10
C
20
20
D
10
10
Attempts:
2 left
💡 Hint
Use 'this@Outer' to refer to the outer class instance.
🔧 Debug
advanced
2:00remaining
Why does this code cause a compilation error?
This Kotlin code tries to access an outer class property from a nested class but fails. Why? class Outer { val name = "Outer" class Nested { fun printName() { println(name) } } } fun main() { Outer.Nested().printName() }
ANested class is not inner, so it cannot access outer class members directly.
BThe property 'name' is private and inaccessible.
CThe syntax for accessing outer class members is incorrect.
DNested classes cannot have functions in Kotlin.
Attempts:
2 left
💡 Hint
Check the difference between 'inner' and 'nested' classes in Kotlin.
❓ Predict Output
advanced
2:00remaining
Output of inner class accessing outer class function
What is the output of this Kotlin program?
Kotlin
class Outer {
    fun outerFun() = "Outer Function"
    inner class Inner {
        fun callOuter() = outerFun()
    }
}

fun main() {
    println(Outer().Inner().callOuter())
}
AOuter Function
BError: Cannot call outerFun from Inner
Cnull
DOuter
Attempts:
2 left
💡 Hint
Inner classes can call outer class functions directly.
🧠 Conceptual
expert
2:00remaining
How to access outer class property when inner class has same property name?
In Kotlin, if an inner class has a property with the same name as the outer class, how can you access the outer class property inside the inner class?
AUse 'Outer.propertyName' directly without any qualifier.
BUse 'super.propertyName' inside the inner class.
CUse 'this@Outer.propertyName' to refer to the outer class property.
DIt's not possible to access outer class property if names clash.
Attempts:
2 left
💡 Hint
Kotlin provides a special syntax to refer to outer class instance.

Practice

(1/5)
1. In Kotlin, what keyword must you use to allow an inner class to access members of its outer class?
easy
A. inner
B. outer
C. this
D. nested

Solution

  1. Step 1: Understand inner class behavior

    By default, nested classes in Kotlin cannot access outer class members directly.
  2. Step 2: Identify the keyword for access

    The keyword inner allows the nested class to hold a reference to the outer class and access its members.
  3. Final Answer:

    inner -> Option A
  4. Quick Check:

    Use inner for access [OK]
Hint: Remember: only 'inner' classes access outer members directly [OK]
Common Mistakes:
  • Confusing 'inner' with 'nested' keyword
  • Using 'this' instead of 'inner'
  • Assuming all nested classes access outer members
2. Which of the following Kotlin class declarations correctly allows the inner class to access the outer class's property name?
easy
A. class Outer { val name = \"Kotlin\"; inner class Inner { fun printName() = println(name) } }
B. class Outer { val name = \"Kotlin\"; class Inner { fun printName() = println(name) } }
C. class Outer { val name = \"Kotlin\"; nested class Inner { fun printName() = println(name) } }
D. class Outer { val name = \"Kotlin\"; inner class Inner { fun printName() = println(this.name) } }

Solution

  1. Step 1: Check class declaration syntax

    Only the class declared with inner keyword can access outer class properties directly.
  2. Step 2: Analyze each option

    class Outer { val name = \"Kotlin\"; inner class Inner { fun printName() = println(name) } } uses inner and accesses name correctly. class Outer { val name = \"Kotlin\"; class Inner { fun printName() = println(name) } } lacks inner. class Outer { val name = \"Kotlin\"; nested class Inner { fun printName() = println(name) } } uses invalid nested keyword. class Outer { val name = \"Kotlin\"; inner class Inner { fun printName() = println(this.name) } } tries to access this.name which refers to inner class, not outer.
  3. Final Answer:

    B -> Option A
  4. Quick Check:

    Use inner and direct property name [OK]
Hint: Use 'inner' keyword and access outer property by name [OK]
Common Mistakes:
  • Omitting 'inner' keyword
  • Using 'nested' instead of 'inner'
  • Using 'this.name' inside inner class incorrectly
3. What is the output of the following Kotlin code?
class Outer(val x: Int) {
    inner class Inner {
        fun printX() = println(x)
    }
}

fun main() {
    val outer = Outer(10)
    val inner = outer.Inner()
    inner.printX()
}
medium
A. Runtime exception
B. 0
C. Compilation error
D. 10

Solution

  1. Step 1: Understand inner class access

    The inner class can access the outer class property x because it is declared with inner.
  2. Step 2: Trace the code execution

    An Outer object is created with x=10. The inner class instance calls printX() which prints x value 10.
  3. Final Answer:

    10 -> Option D
  4. Quick Check:

    Inner class prints outer property value [OK]
Hint: Inner class prints outer property directly if 'inner' keyword used [OK]
Common Mistakes:
  • Assuming inner class cannot access outer property
  • Expecting 0 instead of 10
  • Thinking code causes error
4. Identify the error in this Kotlin code snippet:
class Outer {
    val message = "Hello"
    class Inner {
        fun greet() = println(message)
    }
}
medium
A. Incorrect println syntax
B. Missing semicolon after 'message' declaration
C. Inner class cannot access 'message' without 'inner' keyword
D. Outer class must be declared as 'inner'

Solution

  1. Step 1: Check nested class access rules

    Nested classes without inner keyword cannot access outer class properties.
  2. Step 2: Identify cause of error

    The Inner class tries to print message but cannot see it, causing a compilation error.
  3. Final Answer:

    Inner class cannot access 'message' without 'inner' keyword -> Option C
  4. Quick Check:

    Use 'inner' to access outer members [OK]
Hint: Add 'inner' keyword to nested class to fix access error [OK]
Common Mistakes:
  • Thinking semicolon is required in Kotlin
  • Assuming println syntax is wrong
  • Confusing outer class declaration with inner
5. Given this Kotlin code, what will be the output?
class Outer(val number: Int) {
    inner class Inner {
        fun multiply(factor: Int) = number * factor
    }
}

fun main() {
    val outer = Outer(5)
    val inner = outer.Inner()
    println(inner.multiply(3))
}
hard
A. 53
B. 15
C. Compilation error due to access
D. Runtime exception

Solution

  1. Step 1: Understand inner class access and method

    The inner class can access the outer class property number because it is declared with inner. The method multiplies number by the given factor.
  2. Step 2: Calculate the output

    Outer number is 5, factor is 3, so 5 * 3 = 15 is printed.
  3. Final Answer:

    15 -> Option B
  4. Quick Check:

    Inner class method uses outer property correctly [OK]
Hint: Inner class can use outer properties in calculations [OK]
Common Mistakes:
  • Concatenating instead of multiplying
  • Expecting access error without 'inner'
  • Confusing output with string '53'
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard