簡體   English   中英

來自另一個沒有繼承的類的Java覆蓋方法

[英]Java override method from another class without inheritance

我在這里發現了類似的問題:
覆蓋Java中沒有子類化的方法

但我的有點不同,我有兩個類,一個基於GUI,另一個只是修改第一類元素的方法。 如果它只是編輯基本函數,我沒有遇到任何問題,但現在我想從第二個類中覆蓋第一類方法中的jbutton而不繼承它。 我在哪里開始?

我有臨時解決方案,第二個類擴展JButton,覆蓋我想要的方法,並將該類添加到我的GUI類(匿名對象與否,無所謂)。 但我想找到一種方法來找到解決問題的方法,甚至可能嗎? 謝謝 :)

編輯
這是示例代碼:

第一類,因為它只是jframe中的一個按鈕,我只在構造函數中添加它們:
ButtonOverrider bo=new ButtonOverrider(); - >這是overrider類
button=bo.overridePaintComponent(bo); //第一次嘗試
button=bo.overridePaintComponent(); //第二次嘗試
bo.overridePaintComponent(bo); //第三次嘗試

這是ButtonOverrider方法:

public JButton ButtonOverrider(JButton button) {
  button = new JButton() {
    @Override
    protected void paintComponent(Graphics g) {
      Graphics2D g2 = (Graphics2D) g.create();
      GradientPaint gp = new GradientPaint(0, 0,
      Color.blue.brighter().brighter(), 0, getHeight(),
      getBackground().darker().darker());

      g2.setPaint(gp);
      g2.fillRect(0, 0, getWidth(), getHeight());
      g2.dispose();

      super.paintComponent(g);
      super.setContentAreaFilled(false);
      super.setFocusPainted(false);
      super.setBorder(new LineBorder(Color.yellow, 2));
      super.setText("Shuro");
    }
  };
  return button;
}

我在哪里開始?

繼承。 這是壓倒任何理由的唯一方法。 目前尚不清楚為什么你不想使用繼承,但這確實是覆蓋方法的唯一方法。 無論您使用匿名類還是命名類都是無關緊要的,但它必須擴展該類才能覆蓋該方法。 這就是覆蓋Java的工作方式。

編輯:您在更新的問題顯示的代碼確實通過創建匿名內部類來使用繼承...但它沒有按照我期望的方式執行,因為它創建了一個對象而不是覆蓋方法現有的對象。 永遠不會使用您的參數值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM