我开始开发一些东西,并且我有几个使用相同方法的类,所以我希望将它放在一个类中(以便在一个地方轻松修复等)。问题是我不知道如何在主类中使用来自不同类的方法。解释代码:
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);
但也许有更好的解决方案?
答案 0 :(得分:2)
您可以使用public class B extends C {
public UiDevice device;
device = super.methodFromB();
public void test(){
methodFromB();
}
}
关键字访问您要扩展的类中的任何内容。在你的情况下:
{{1}}
答案 1 :(得分:2)
首先,作为一名初学程序员,除非你是为学校做的,否则请避免扩展课程。它会导致一个很大的意大利面乱,直到你学会调节它(我为这个很大的时间而堕落),你现在要做的不是好的代码。
我认为你要做的是什么,不过是这样的:
(假设未指定的代码仍然存在)
class A extends C
{
public UiDevice getDevice()
{
return device;
}
}
abstract class C
{
public abstract UiDevice getDevice();
public methodFromC()
{
getDevice().doSomethingToDevice();
}
}
此模式允许您从父类中的A访问。
B也可以拥有自己的设备。我相信这就是你所追求的(C能够在A的设备或B的设备上运行,具体取决于扩展的C)。
摆脱公共变量。
答案 2 :(得分:0)
如果你的许多类声明了做同样事情的方法,你可以让它们从一个类继承,让我们称之为类A.在类中声明并实现该方法。然后在子类中声明方法并在其体内写下:
super.nameOfYourMethodFromParentClass();
通常,要使用来自不同类的方法,您只需创建类的对象并在其上调用方法。像:
class A {
public void myMethod() {
B b = new B();
b.methodFromB();
}
}
谈到继承时要注意这一点:
您可以创建一个声明此方法的类的对象,或者从声明此方法的类继承并在此对象上调用该方法的类。
像: A类继承自C。在C类中,您声明了方法methodFromC()。要从类A调用C类对象的方法,您可以执行以下操作:
A a = new A();
a.methodFromC(device);
这里调用的方法是C类的方法。
但是如果在类A中你覆盖了类C中的方法(这意味着在类A中你声明了一个与类C中的方法具有相同名称和参数的方法),那么通过执行上面编写的代码,你将调用A类的方法,而不是C类。