【问题标题】:Multiple inheritance of a class? [duplicate]一个类的多重继承? [复制]
【发布时间】:2013-09-27 06:38:45
【问题描述】:

我是 Java 新手,我遇到了一个典型的问题。我知道 Java 不支持多重继承。所以我想知道如何实现下面的类

class JPT extends JPanel extends Thread;

由于无法编辑分类库的明显原因,多级继承对我没有帮助,如果我进行编辑,我可能会因依赖关系而出现问题。

【问题讨论】:

  • +1。我第一次在 SO 上看到这个问题。和你得到的最佳答案。也可以为答案 +1。
  • 在 14 年中,我认为我只真正想要两次多重继承,最终使用代理模式

标签: java multiple-inheritance


【解决方案1】:

你应该使用Runnable接口......

class JPT extends JPanel implements Runnable

这样您只需创建一个新的Thread 实例,将您的JPT 类的引用传递给它并启动它...

JTP jpt = new JPT();
Thread thread = new Thread(jpt);
thread.start();

现在,我必须告诉你,这让我很害怕。

Swing 是一个单线程框架。也就是说,对 UI 的所有交互和修改都应该在 Event Dispatching Thread 的上下文中执行,这意味着您永远不应尝试从 EDT 以外的任何线程修改任何 UI 组件。

查看Concurrency in Swing了解更多详情

【讨论】:

  • 首先我认为不可能。我愚蠢的大脑:-/
  • +1 不是为了让它工作,而是为了添加关于Swing 是一个单线程框架的解释。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 没有什么不可能的,虽然不是一个好主意:P
  • @MadProgrammer 嘿嘿。好一个。刚刚意识到:P
【解决方案2】:

如果你想在 Panel 的子类上创建一个 Thread,你可以这样做

class JPT extends JPanel implements Runnable
{
    JPT()
    {
        new Thread(this).start();
    }

    public void run()
    {
        // Code to run in new thread here.
    }
}

希望这会有所帮助。

【讨论】:

  • 首先我认为不可能。我愚蠢的大脑:-/
  • 谢谢 :):) 现在它工作正常......也感谢其他人提供宝贵的 cmets
【解决方案3】:

当然,Java 不支持多重继承,但是你可以在一个类中实现多个接口。在你的情况下,我会使用:

class JPT extends Jpanel implements Runnable {

任何implements Runnable 的东西都可以作为参数传递给Thread 构造函数。例如

JPT JPT = new JPT();
Thread t = new Thread(JPT);
T.start();

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2013-02-20
    • 2015-03-10
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2012-05-26
    • 2014-04-14
    • 2015-01-23
    相关资源
    最近更新 更多