【发布时间】:2016-06-04 17:46:36
【问题描述】:
我正在开发一个使用 Swing 的 Java 应用程序。 我有一个扩展 JDialog 的类,如下所示:
public class customDialog extends JDialog {
//Custom buttons listeners etc.
}
现在为它创建接口的方式(最佳实践)是什么? 我会写:
public interface customDialogInterface {
//Custom methods signatures
}
然后在 customDialog 中使用“实现 customDialogInterface”,但是以这种方式,当我在代码中使用 customDialogInterface 时,我无法访问 JDialog 方法。 否则 JDialog 是一个类,所以我不能在我的界面中扩展它。此外,我无法使用 JDialog 实现的接口扩展 customDialogInterface,因为其中之一是包保护的。
在那些(我想是公地)情况下,正确的处理方式是什么?
更新 1: 我将尝试更好地解释我的问题。 有一个编程原则告诉“程序使用接口而不是具体类”。在此基础上,如何为我的 CustomDialog 创建一个界面? 如果我这样做:
public interface CustomDialogInterface {
public void doA();
public void doB();
}
比我使用 CustomDialog 的代码:
CustomDialogInterface myDialog = new CustomDialog();
myDialog.doA(); //OK
myDialog.doB(); //OK
myDialog.setVisible(true); //ERROR
更新2:我决定再次更新我的问题,因为根据答案似乎不是很清楚。它没有太多信息,因为它还不是真正的代码,它只是一个理论问题。另外,如果我还没有找到可能的解决方案,我会以另一种形式再次在这里写:
-
在我的应用程序中,我需要一个包含我的信息、字段等的 JDialog。 我怎样才能获得它? 定义一个类:
类 MyImplementation 扩展 JDialog { 公共doA(字符串txt){ //这是我实现的特定方法 } }
-
现在,我想遵循良好的编程规则“通过接口编程,而不是通过实现”,所以我需要一个自定义对话框的接口
界面 InterfaceForMyDialog { 公共doA(字符串txt); }
-
MyImplementation 类必须实现接口,所以我更改上面的伪代码只是添加和实现
类 MyImplementation 扩展 JDialog 实现 InterfaceForMyDialog { 公共doA(字符串txt){ //这是我实现的特定方法 } }
-
现在最后我需要在外部代码中的某处使用我的新对话框(比如说在 main 方法中的某处),如下所示:
... InterfaceForMyDialog myDialogInterface = new MyImplementation(...);
问题: 您应该如何完成上面的代码以使用方法“doA(String txt)”为我的自定义对话框设置一些文本,然后显示对话框本身? 我认为使用这种结构是不可能的,我找到了一个使用抽象类的解决方案(见下文)。如果我错了或者有更好的解决方案解释请写在这里。
【问题讨论】:
-
什么错误?复制并粘贴到这里。是编译错误吗?
-
也许你应该看看Inheritance。根据您有限的信息,我建议您只实现接口而不是扩展对话框,如 Andrew 所述
标签: java swing inheritance implementation