Access Modifiers tells the scope of classes,objects,properties Kotlin supports public, private, protected, internal access modifiers.

Modifier Description
public Accessable everywhere
private Accessible inside the file containing the declaration
internal Accessible inside the same module (a set of Kotlin files compiled together)
protected Accessible inside Subclasses

By default access modifier is public

Example

open class Parent() {
    var a = 1                 // public by default
    private var b = 2         // private to Parent class
    protected open val c = 3  // visible to the Parent and the Derived class
    internal val d = 4        // visible inside the same module

    protected fun e() { }     // visible to the Parent and the Derived class
}

class Derived: Parent() {

    // a, c, d, and e() of the Parent class are visible
    // b is not visible

    override val c = 9        // c is protected
}

fun main(args: Array) {
    val base = Parent()

    // base.a and base.d are visible
    // base.b, base.c and base.e() are not visible

    val derived = Derived()
    // derived.c is not visible
}

private modifier for Constructor

class Parent(val a: Int) {
    // code
}
    

This is default constructor, if we want to it private then we need to use contructor key word

class Parent private constructor(val a: Int) {
    // code
}