Глобальные поля для классов - PullRequest
2 голосов
/ 21 февраля 2012

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

Class Diagram

У меня есть три класса, производные от основного класса. У каждого класса есть метод, который взаимодействует с полем. В этом случае есть JFrame, который вызывает класс (JPanel) и добавляет его на панель содержимого.

Я нашел способ передачи ссылки на объект, который создает класс Frame, в конструктор класса Panel. И ссылаться на них через это.

Есть ли более эффективный способ? Как я могу создать глобальные поля или методы для всех производных классов? В этом случае они являются компонентами основного класса?

UPDATE

Примерно так.

import javax.swing.JFrame;
import javax.swing.JPanel;

public class JFrame1 extends JFrame {

    protected String field1;
    protected String field2;

    public JFrame1() {
        add(new Panel1());
    } 
}

class Panel1 extends JPanel {

    public Panel1() {

         //   field1 = "String"; Wrong
        }
    }

Я знаю, что могу вложить class Panel1 внутрь public class Frame1, и проблема будет решена, но что если Я хочу два класса в разных файлах ?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

три класса, производные от основного класса - что это значит?Ваши три класса происходят от (расширяют) JPanel, и в нем нет никаких полей.

Если вы спрашиваете, как ваши три класса должны обращаться к полям из Frame1, который предположительно является их контейнером- тогда вы должны использовать getParent(), чтобы получить ссылку на родительский класс, проверить, является ли он Frame1, и если да, - получить доступ к его полям.

0 голосов
/ 23 февраля 2012

Хорошо, я нашел способ.

Класс Frame

import javax.swing.JFrame;

public class JFrame1 extends JFrame {

    private String field1;

    public JFrame1() {
        add(new PanelA());
    } 

class PanelA extends Panel1 {

  @Override
  public String getField1() {
       return field1
  }
}

Создание интерфейса

public interface Connector {
    public String getField1();
}

И класс Panel1

import javax.swing.JPanel;

public abstract class Panel1 extends JPanel implements Connector {

    field1 = getField1();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...