используя интерфейс для связи между двумя классами Java - PullRequest
0 голосов
/ 15 декабря 2011

У меня 2 класса А и Б.

class A implements Constants{</p> <pre><code> private int state;

}

class B implements Constants{
foo(){
   //want to set state variable of class A like this
   state = state1
 }

}
interface Constants{
 public final int state1;
 public final int state2;
}

Я не хочу иметь экземпляр класса A в классе B. Как мне это сделать? Если у меня есть функция для установки переменной в интерфейсе, то оба класса должны реализовать эту функцию. Это было бы неправильно, верно? Потому что тогда 2 определения для одной и той же функции будут конфликтовать?

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

В java ничего не называется функциями.Это методы.

В ваших классах могут быть методы получения и установки для свойств, которые нужно устанавливать, и получать их от внешних классов.

Ваш вопрос неясен.

Если ваш класс B расширяет класс A, то через конструктор класса B вы можете установить свойства класса A, который является суперклассом.

Надеюсь, это поможет!

0 голосов
/ 15 декабря 2011

Как правило, вы хотите избежать написания любого метода в классе, который пытается изменить внутреннее состояние другого класса. Какой бы трюк вы ни придумали для достижения такой цели, вы нарушаете принцип инкапсуляции, который является основной причиной использования классов в первую очередь.

Если есть какое-то состояние, которое вы хотите иметь доступным из нескольких классов, я бы рекомендовал разбить это состояние на его собственный класс, и каждый из двух классов взаимодействовал бы с ним с помощью методов getter / setter или служебных методов.

0 голосов
/ 15 декабря 2011

Наличие интерфейса не означает, что переменная будет разделена между классами, это скорее способ определения классов, которые ДОЛЖНЫ переопределять функции в интерфейсе. Вы можете прочитать о них здесь . Чтобы разделить переменную между двумя классами, вы можете либо сделать переменную статической, и поместить ее в другой класс, который расширяет оба ваших класса (в действительности это глобальная переменная, что является плохой практикой и не является поточно-ориентированной), или иметь один из классов экземпляр другого и вызовет получателей / установщиков.

РЕДАКТИРОВАТЬ: есть похожий вопрос здесь , который показывает вам, что я имею в виду о статической переменной.

...