如何在 java 中对我自己的 class 调用 2 个不同 class 的 2 个不同方法?
How to invoke 2 different methods of 2 different classes to my own class in java?
我需要从两个不同的 classes 调用两个不同的方法到我自己的 class 并且这两个 classes 在两个不同的 .jar 文件中供应商。
场景如下:
- abc.jar: public class A{ public void m1(){} }
- xyz.jar: public class B{ public void m2(){} }
我自己的 class 是 MyClass{}。如果我必须在我的 class 中使用这两种方法,我需要扩展两个 classes,但由于 java 不支持多重继承,我无法实现它。
如果有任何其他方法可以访问我的 class 中的 m1() 和 m2() 方法,请分享。
注意:我必须扩展可用的功能,并且应该根据我的要求自定义方法。
编辑:问题后来得到澄清,OP 想扩展 类 的功能。
一个想法是为两个不同的基础 类 创建两个单独的子 类。扩展这些 sub-类 中的功能,然后在您的 MyClass 中使用组合来使用这些 sub-类 及其 super-类.
的功能
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中实现多重继承。
较早的回答:
这两种方法都是 public,因此您无需扩展 类 即可使用这些方法。只需创建这两个 类 的对象并调用它们各自的方法。
A a = new A();
a.m1();
B b = new B();
b.m2();
也许我会这样做,
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()};
}
虽然在我看来这不是很棒,但无论如何你为什么要重写这两个方法?如果您要这样做,为什么不从零开始创建它们呢?还是您打算使用那些 class 中的其他方法? nvm 无论如何我都会使用合成。
希望它能让你耳目一新,从这里有所收获:) GL
我需要从两个不同的 classes 调用两个不同的方法到我自己的 class 并且这两个 classes 在两个不同的 .jar 文件中供应商。
场景如下:
- abc.jar: public class A{ public void m1(){} }
- xyz.jar: public class B{ public void m2(){} }
我自己的 class 是 MyClass{}。如果我必须在我的 class 中使用这两种方法,我需要扩展两个 classes,但由于 java 不支持多重继承,我无法实现它。
如果有任何其他方法可以访问我的 class 中的 m1() 和 m2() 方法,请分享。 注意:我必须扩展可用的功能,并且应该根据我的要求自定义方法。
编辑:问题后来得到澄清,OP 想扩展 类 的功能。
一个想法是为两个不同的基础 类 创建两个单独的子 类。扩展这些 sub-类 中的功能,然后在您的 MyClass 中使用组合来使用这些 sub-类 及其 super-类.
的功能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中实现多重继承。
较早的回答:
这两种方法都是 public,因此您无需扩展 类 即可使用这些方法。只需创建这两个 类 的对象并调用它们各自的方法。
A a = new A();
a.m1();
B b = new B();
b.m2();
也许我会这样做,
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()};
}
虽然在我看来这不是很棒,但无论如何你为什么要重写这两个方法?如果您要这样做,为什么不从零开始创建它们呢?还是您打算使用那些 class 中的其他方法? nvm 无论如何我都会使用合成。
希望它能让你耳目一新,从这里有所收获:) GL