![](/img/trans.png)
[英]how to create generic java class that extends class and implements interface?
[英]How to create an Interface for a class that extends JDialog (or in general another class)
我正在开发一个利用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。如何获取它? 定义一个类:
class MyImplementation扩展JDialog {public doA(String txt){//这是我实现的特定方法}}
现在,我要遵循良好的编程规则:“按界面编程,而不按实现编程”,因此我需要一个用于自定义对话框的界面
interface InterfaceForMyDialog {public doA(String txt); }
令人遗憾的是,类MyImplementation必须实现接口,因此我更改了上面的伪代码,只需添加并实现
类MyImplementation扩展JDialog实现InterfaceForMyDialog {public doA(String txt){//这是我实现的特定方法}}
现在,最后我需要在外部代码的某处(在main方法的某处)使用新对话框,如下所示:
... InterfaceForMyDialog myDialogInterface = new MyImplementation(...);
问题:如何使用“ doA(String txt)”方法完成上面的代码以将一些文本设置到我的自定义对话框中,然后显示对话框本身? 我认为使用这种结构是不可能的,我找到了一个使用抽象类的解决方案(见下文)。 如果我错了或者有更好的解决方案,请在这里写下。
正确的是,您只能扩展一个班级; 由于要扩展JDialog,因此可以实现0个或更多接口,但不能扩展另一个类。
如果您的界面有两种方法:
public interface customDialogInterface
{
public void doA();
public int doB();
}
那你的课就可以
public class customDialog extends JDialog implements customDialogInterface
只要customDialog
具有方法doA()
和doB()
注意:按照惯例,类名和接口名都以大写字母开头。 如果您使用CustomDialog
和CustomDialogInterface
那么全世界的Java程序员都会更容易理解代码。
好的,我找到了解决方案。 我没有将CustomDialogInterface声明为接口,而是将其声明为扩展JDialog的抽象类。 然后,我用提供实现的类扩展此抽象类。 如果有更好的解决方案,请告诉我!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.