Java override method from another class without inheritance

孤者浪人 提交于 2019-12-23 12:51:07

问题


I found a similar question here:
overriding methods without subclassing in Java

But mine a little different, I have two classes, 1 GUI based, and the other just methods to modify elements in first class. If it just editing the basic function, I meet no problem, but now I want to override a jbutton in first class method from the second class without inheriting it. Where do I have to start?

I have temporary solution which is that the second class extends JButton, override method I want to, and add that class to my GUI class (anonymous object or not, is doesn't matter). But I want to discover a way to find a way to my question, is it even possible? Thanks :)

Edit
Here's sample code:

First class, as it only a button in jframe, I only add these in constructor:
ButtonOverrider bo=new ButtonOverrider(); -> this is the overrider class
button=bo.overridePaintComponent(bo); //first try
button=bo.overridePaintComponent(); //second try
bo.overridePaintComponent(bo); //third try

And here's the ButtonOverrider method:

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;
}

回答1:


Where do I have to start?

With inheritance. That's the only way that overriding makes any sense. It's not clear why you don't want to use inheritance, but that really is the only way of overriding a method. Whether you use an anonymous class or a named one is irrelevant, but it must extend the class in order to override the method. That's simply the way overriding works in Java.

EDIT: The code you've shown in your updated question does use inheritance by creating an anonymous inner class... but it doesn't do what I expect you want it to, because it creates a new object rather than overriding the method on the existing object. Your parameter value is never used.



来源:https://stackoverflow.com/questions/16997747/java-override-method-from-another-class-without-inheritance

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!