【问题标题】:How to invoke 2 different methods of 2 different classes to my own class in java?java - 如何在java中为我自己的类调用2个不同类的2个不同方法?
【发布时间】:2017-04-17 15:01:17
【问题描述】:

我需要从两个不同的类调用两个不同的方法到我自己的类,这两个类位于供应商提供的两个不同的 .jar 文件中。

场景如下:

  • abc.jar:公共类 A{ public void m1(){} }
  • xyz.jar:公共类 B{ public void m2(){} }

我自己的班级是 MyClass{}。如果我必须在我的类中使用这两个方法,我需要扩展这两个类,但是由于 java 不支持多重继承,我无法实现。

如果有任何其他方法可以访问我班上的 m1() 和 m2() 方法,请分享。 注意:我必须扩展可用的功能,并应根据我的要求自定义方法。

【问题讨论】:

  • 为什么不使用组合模式?是否需要使用herency?为什么不创建自己的方法并使用例如 new A.methodA() 调用它们,看看这个:journaldev.com/1325/…
  • @Yussef 我正在寻找继承,因为我必须向现有方法添加新功能。我猜唯一的方法就是压倒一切。

标签: java jar multiple-inheritance


【解决方案1】:

编辑:问题稍后澄清,OP希望扩展类的功能。

一个想法是为两个不同的基类创建两个单独的子类。扩展这些子类中的功能,然后在您的 MyClass 中使用组合来使用这些子类及其超类的功能。

public class SubA extends A {
    @Override
    public void m1() {
        // add extra functionalities
        super.m1(); // invoke existing functionalities
    }
}

public class SubB extends B {
    @Override
    public void m2() {
        // add extra functionalities
        super.m2(); // invoke existing functionalities
    }
}

public class MyClass {
    SubA a = new SubA();
    SubB b = new SubB();
    a.m1();
    b.m2();
}

你也可以参考这个问题How do Java Interfaces simulate multiple inheritance?详细解释如何在Java中实现多继承。

较早的答案:

这两种方法都是公共的,因此您无需扩展类即可使用这些方法。只需创建这两个类的对象并调用它们各自的方法即可。

A a = new A();
a.m1();

B b = new B();
b.m2();

【讨论】:

  • 我同意@iavanish,因为您不是在谈论接口。但是,如果您想了解 Java 如何“模拟”基本上由中间接口支持的多重继承,请查看这篇文章。 stackoverflow.com/questions/3556652/…
  • @iavanish 我很欣赏你的回答,但我的要求是定制那些给定的方法(我之前没有提到过)。所以根据我的理解,我必须使用继承来覆盖它们。请建议...
【解决方案2】:

也许我会这样做,

class A{
  public void m1{};
}

class B{
  public void m2{};
}

class OneOverrideA extends A{
    @Override
    public void m1{};
}

class OneOverrideB extends B{
    @Override
    public void m2{};
}

class FatherClass extends OneOverrideA{

  //well you have your class method m1 here but we cannot extend more than two class

  public void m2{new OneOverrideB().m2()};

}

虽然在我看来它并不出色,但你为什么要覆盖这两种方法?如果您要这样做,为什么不从零开始创建它们呢?还是您要使用这些类中的其他方法? nvm 无论如何我都会使用组合。

希望它能让你重新振作起来,从这里得到一些东西:) GL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多