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

时间:2018-03-27 16:30:31

标签: java android class android-studio extends

我开始开发一些东西,并且我有几个使用相同方法的类,所以我希望将它放在一个类中(以便在一个地方轻松修复等)。问题是我不知道如何在主类中使用来自不同类的方法。解释代码:

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);

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

3 个答案:

答案 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类。