코틀린 코드에서는 INSTANCE 변수에 접근할 수 없다. 하지만 코틀린의 싱글턴을 참조하는 자바 클래스에서는 이 변수를 사용할 수 있다. 12장 자바 상호 운용성에서 이 주제를 더 자세히 다룬다.
클래스와 마찬가지로 객체 선언도 멤버 함수와 프로퍼티를 포함할 수 있고, 초기화 블록도 포함할 수 있다. 하지만 객체에는 주생성자나 부생성자가 없다. 객체 인스턴스는 항상 암시적으로 만들어지기 때문에 객체의 경우 생성자 호출이 아무런 의미가 없다.
객체의 본문에 들어있는 클래스에는 inner가 붙을 수 없다. 내부 클래스의 인스턴스는 항상 바깥쪽 클래스의 인스턴스와 연관되는데, 객체 선언은 항상 인스턴스가 하나뿐이므로 inner 변경자가 불필요해진다. 그래서 객체 안에 정의된 클래스에 대해서는 inner 사용을 금지한다.
최상위 선언들과 마찬가지로, 객체의 멤버를 임포트해서 간단한 이름만 사용해 참조할 수 있다. 다음 예에서 Application 객체는 다른 파일에 정의돼 있다.
import Application.exit fun main() { println(Application.name) // 전체 이름을 사용 exit() // 간단한 이름을 사용 }
하지만 객체의 모든 멤버가 필요할 때 임포트 문으로 임포트할 수는 없다.
import Application.* // Error