Почему включение переменной-члена класса в класс java не похоже на примесь ruby?

Я читаю о миксинах в Ruby и размышляю над некоторыми своими знаниями о java. Разве миксин - это не просто еще одна переменная-член, которая реагирует на методы этого типа? Я понимаю, что в таких языках, как ruby, это просто набор методов, которые можно «смешать» с классом. Но чем это отличается от класса Java, содержащего переменную-член класса?

Заранее спасибо.


person Horse Voice    schedule 03.05.2014    source источник
comment
Мне любопытно, что вы имеете в виду под эквивалентом миксина Ruby - a java class containing a class member variable   -  person Arie Xiao    schedule 03.05.2014


Ответы (1)


Я бы сказал, что Ruby mixins больше похож на Java interfaces, чем на переменные класса Java.

Подобно Java, Ruby не имеет множественного наследования. В обоих языках у класса может быть только один родительский класс (хотя этот родитель может иметь своего собственного родителя и т. Д.).

Подобно тому, как Java использует interfaces для объявления функций, которые должны определять все реализующие классы, Ruby использует mixins для улучшения функциональности данной иерархии классов.

Переменные экземпляра Java определены внутри класса, а примеси Ruby подобны добавлению нового родительского класса между вашим текущим классом и его родительским. Объектам класса миксины могут показаться похожими на переменные экземпляра Java (точно так же, как объект не знает разницы между тем, какие члены он получает от своего класса, создающего экземпляр, и какие члены были унаследованы от родительских классов).

Возможно, важное различие состоит в том, что примеси Ruby добавляются в иерархию наследования, в то время как добавление членов экземпляра Java требует изменения фактического класса.

person sfletche    schedule 03.05.2014
comment
Я не имел в виду, чтобы переменные-члены класса java были статичными. Допустим, они не являются статическими и определены как частные переменные экземпляра-члена. Разве они не были бы эквивалентами миксинов? - person Horse Voice; 03.05.2014