Kotlin là một ngôn ngữ hướng đối tượng. Trong một ngôn ngữ hướng đối tượng, một cái gì đó không phải là một đối tượng là một hạn chế cực kỳ tê liệt. Các lớp không phải là đối tượng, nhưng đối tượng là đối tượng (duh!), Vì vậy câu hỏi nên là: tại sao một ngôn ngữ sẽ không sử dụng các đối tượng đồng hành?
Một khía cạnh khác là sự đơn giản: tại sao có hai thứ, đối tượng có thành viên thể hiện và lớp có thành viên tĩnh khi bạn chỉ có thể có đối tượng có thành viên thể hiện?
Một cách khác được sử dụng trong nhiều ngôn ngữ có nguồn gốc từ Smalltalk, là tự biến các lớp thành đối tượng. Ví dụ, trong các lớp Smalltalk là các thể hiện của hệ thống phân cấp song song của siêu dữ liệu . Trong Ruby, các lớp là các thể hiện của Class
lớp (và vâng, điều đó có nghĩa là đó Class
là một thể hiện của chính nó). Trong trường hợp đó, "các phương thức lớp" thực sự chỉ là các phương thức cá thể bình thường của siêu dữ liệu của lớp. Tôi không biết tại sao thiết kế này không được chọn trong Java (vì nó gần với mối quan hệ với Smalltalk), nhưng nó có thể có liên quan đến việc đơn giản hóa hệ thống loại (lưu ý rằng hầu hết các ngôn ngữ có các đối tượng lớp có xu hướng ngôn ngữ động).