У меня есть суперкласс, называемый Параметр. Существует много разных типов параметров, и они, конечно, имеют разные методы. Проблема в том, что я инициализирую параметр как один из подстановок, но все же он не позволяет мне использовать события подкласса!Как использовать методы подкласса в суперклассе?
package com.lbg.c2;
public class Parameter {
private String type;
public static final Parameter NumberParam = new NumberParam();
public static final Parameter StringParam = new StringParam();
public static final Parameter AnyTypeParam = new AnyTypeParam();
public static final Parameter AnimationParam = new AnimationParam();
public static final Parameter AudioParam = new AudioParam();
public static final Parameter CmpParam = new CmpParam();
public static final Parameter ComboOptionParam = new ComboOptionParam();
public static final Parameter ComboParam = new ComboParam();
public static final Parameter KeybParam = new KeybParam();
public static final Parameter LayerParam = new LayerParam();
public static final Parameter LayoutParam = new LayoutParam();
public static final Parameter ObjectParam = new ObjectParam();
public Parameter() {
}
public Parameter (String t) {
type = t;
}
public String getType() {
return type;
}
public static Parameter init (String t) {
if (t.equals("number")) {
return NumberParam;
}
else if (t.equals("string")) {
return StringParam;
}
else if (t.equals("any type")) {
return AnyTypeParam;
}
else if (t.equals("animation")) {
return AnimationParam;
}
else if (t.equals("audio")) {
return AudioParam;
}
else if (t.equals("comparision")) {
return CmpParam;
}
else if (t.equals("combo option")) {
return ComboOptionParam;
}
else if (t.equals("combo")) {
return ComboParam;
}
else if (t.equals("keyboard")) {
return KeybParam;
}
else if (t.equals("layer")) {
return LayerParam;
}
else if (t.equals("layout")) {
return LayoutParam;
}
else if (t.equals("object")) {
return ObjectParam;
}
else {
return new Parameter();
}
}
}
Этот метод нашел статически в классе параметров так, когда вам это может инициализировать его из переданной строки.
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String types [] = {"number","string","any type","comparision","combo option",
"combo","object","layer","layout","keyboard","animation","audio"};
JComboBox<String> box = new JComboBox<String>(types);
JLabel text = new JLabel ("Select the parameter type:\n");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(text, BorderLayout.NORTH);
panel.add(box, BorderLayout.SOUTH);
JOptionPane.showMessageDialog(frame, panel, "New Parameter", JOptionPane.QUESTION_MESSAGE);
Parameter p = Parameter.init((String) box.getSelectedItem());
if (p instanceof NumberParam || p instanceof StringParam || p instanceof AnyTypeParam) {
String label = JOptionPane.showInputDialog(frame,"Parameter Label?","New Parameter",JOptionPane.QUESTION_MESSAGE);
p.setLabel(label); // it says it needs casting!!
}
}
});
Здесь теперь статический метод Parameter должен возвращать подкласс класса Parameter, но все же это не позволяет мне. Но теперь это подкласс, почему он не позволяет мне использовать его методы?
Это как сказать Вы устройство, а затем я подклассы вас к телефону, и вы не можете позвонить другим, потому что вы все еще известны как устройство
уменьшить код основных частей, чтобы показать вашу проблему, я думаю, что пару строк будет достаточно –
@LuigiCortese: Это уменьшенный много. – Makoto
Что вы возвращаете в метод init(). Являются константами? Потому что, если нет, возможно, вы получите ошибки компиляции. Если вы пытаетесь создать экземпляр, вы должны использовать новый. –