I want to created a nested class that can only be visible to and instantiated from the parent class.
But I also want to be able to use an instance of the nested class through a public variable of the parent class.
I tried making the nested class private, or making the nested class' constructor private, but it won't compile.
Is it possible to do this in .NET?
This compiles and works, but the nested class can be used by anybody:
 Public Class OuterClass
        Public X As Integer = 123
        Public NestedClassInstance As New NestedClass(Me)
        Public Class NestedClass
            Private Parent As OuterClass
            Public Sub New(ByVal _Parent As OuterClass)
                Parent = _Parent
            End Sub
            Public Sub GetParentX()
                Debug.WriteLine("X = " & Parent.X.ToString)
            End Sub
        End Class
    End Class
    Sub Main()
        Dim OuterClassInstance As New OuterClass
        OuterClassInstance.NestedClassInstance.GetParentX()
    End Sub
                Accessing the Private Members Write an inner class in it, return the private members from a method within the inner class, say, getValue(), and finally from another class (from which you want to access the private members) call the getValue() method of the inner class.
Core Java bootcamp program with Hands on practiceNo, we cannot override private or static methods in Java. Private methods in Java are not visible to any other class which limits their scope to the class in which they are declared.
A nested type has access to all of the members that are accessible to its containing type. It can access private and protected members of the containing type, including any inherited protected members.
Typically the Private nested class implements an interface or inherits another class, and the interface/base class is exposed. This is useful when you want to hide the implementation to the parent class. Something like this:
Module EntryPoint
    Sub Main()
        Dim OuterClassInstance As New OuterClass
        OuterClassInstance.NestedClassInstance.GetParentX()
    End Sub
End Module
Public Class OuterClass
    Public X As Integer = 123
    Public NestedClassInstance As ISomeImplementation = New NestedClass(Me)
    Private Class NestedClass
        Implements ISomeImplementation
        Private Parent As OuterClass
        Public Sub New(ByVal _Parent As OuterClass)
            Parent = _Parent
        End Sub
        Public Sub GetParentX() Implements ISomeImplementation.GetParentX
            Debug.WriteLine("X = " & Parent.X.ToString)
        End Sub
    End Class
End Class
Public Interface ISomeImplementation
    Sub GetParentX()
End Interface
                        You can't have a private nested class that is also exposed through a public interface.
It is an either or proposition - either the nested class is private, or it is not.
An option is to declare an interface with the contract you want the nested class to implement (with some refactoring tools you can extract an interface from a class) and expose the interface, while keeping the nested class private.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With