如何在主 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 变量。
我开始着手开发一些东西,我很少 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 变量。