如何在主 class 的对象上使用扩展 class 的方法? [JAVA]

How to use methods from extended class on objects from main class? [JAVA]

我开始着手开发一些东西,我很少 class 使用相同方法的人,所以我想把它放在一个 class 中(以便在一个地方轻松修复ETC)。问题是我不知道如何在 main class 中的对象上使用来自不同 classes 的方法。解释码:

public class A extends C {
 public UiDevice device;
 
 device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
 
 public void test(){
  methodFromC();
 }
}
public class B extends C {
 public UiDevice device;
 
 device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
 
 public void test(){
  methodFromC();
 }
}
public class C {
  protected void methodFromC(){
   device.something();
  }
}

我知道我可以通过向 methodFromC 添加参数来做到这一点:

public class C {
 protected void methodFromC(UiDevice device){
     device.something();
 }

和运行它由

methodFromC(device);

但也许有更好的解决方案?

您可以使用 super 关键字访问您正在扩展的 class 中的任何内容。在你的情况下:

public class B extends C {
public UiDevice device;

device = super.methodFromB();

public void test(){
    methodFromB();
}
}

如果您的许多 classes 都声明了做同样事情的方法,您可以让它们继承自一个 class,我们称它为 class A。在 class 声明并实现该方法。然后在 child classes 中声明方法并在其正文中写入:

super.nameOfYourMethodFromParentClass();

一般来说,要使用来自不同 class 的方法,您只需创建 class 的 object 并在其上调用方法。喜欢:

class A {
    public void myMethod() {
        B b = new B();
        b.methodFromB();
    }
}


当谈到继承时,请注意这一点: 您可以创建声明此方法的 class 的 object 或从声明此方法的 class 继承的 class 并在此 object.

喜欢: Class A 继承自 C。在 class C 中,您声明了方法 methodFromC()。要从 class C 在 object 从 class A 调用方法,你可以这样做:

A a = new A();
a.methodFromC(device);

这里调用的方法是classC的方法

但是如果在 class A 中你覆盖了 class C 中的方法(这意味着在 class A 中你声明了一个与 [=] 中的方法具有相同名称和参数的方法28=] C),然后通过执行我上面编写的代码,您将从 class A 调用方法,而不是 class C.

首先,作为初级程序员,除非你是为了上学,否则请避免扩展 classes。在你学会调节它之前,它最终会变得一团糟(我爱上了这个 big-time),你现在尝试做的不是好的代码。

我认为你正在尝试做什么,但是是这样的:

(假设未指定的代码几乎保持原样)

class A extends C
{
    public UiDevice getDevice()
    {
        return device;
    }
}

abstract class C
{
     public abstract UiDevice getDevice();
     public methodFromC()
     {
         getDevice().doSomethingToDevice();
     }
}

此模式允许您访问父级 A 中的内容 class。

B 也可以拥有自己的设备。我相信这就是您所追求的(C 能够在 A 的设备或 B 的设备上运行,具体取决于哪个扩展 C)。

删除 public 变量。