无法声明私有的抽象方法 [英] Can't declare an abstract method private
问题描述
我想这样做,但我做不到。这是我的情景和理性。我有一个测试用例的抽象类,它有一个名为test()的抽象方法。 test()方法由子类定义;它是用某个应用程序的逻辑实现的,例如 CRMAppTestCase扩展CompanyTestCase
。我不希望直接调用test()方法,我希望超类调用test()方法,而子类可以调用一个调用它的方法(并做其他工作,例如设置当前例如,在执行测试之前的日期时间)。示例代码:
I want to do this, yet I can't. Here is my scenario and rational. I have an abstract class for test cases that has an abstract method called test(). The test() method is to be defined by the subclass; it is to be implemented with logic for a certain application, such as CRMAppTestCase extends CompanyTestCase
. I don't want the test() method to be invoked directly, I want the super class to call the test() method while the sub class can call a method which calls this (and does other work too, such as setting a current date-time right before the test is executed for example). Example code:
public abstract class CompanyTestCase {
//I wish this would compile, but it cannot be declared private
private abstract void test();
public TestCaseResult performTest() {
//do some work which must be done and should be invoked whenever
//this method is called (it would be improper to expect the caller
// to perform initialization)
TestCaseResult result = new TestCaseResult();
result.setBeginTime(new Date());
long time = System.currentTimeMillis();
test(); //invoke test logic
result.setDuration(System.currentTimeMillis() - time);
return result;
}
}
然后扩展这个....
Then to extend this....
public class CRMAppTestCase extends CompanyTestCase {
public void test() {
//test logic here
}
}
然后调用它... 。
TestCaseResult result = new CRMAppTestCase().performTest();
推荐答案
私有方法不是多态的(你不能继承它们)因此,制作私有方法摘要是没有意义的。使方法抽象意味着你必须在子类中覆盖和实现它,但由于你不能覆盖私有方法,你也不能使它们抽象。
Private methods are not polymorphic (you cannot inherit them), so it makes no sense to make a private method abstract. Making a method abstract means you'd have to override and implement it in a subclass, but since you can't override private methods, you can't make them abstract either.
您应该将其设为 protected
而不是 private
。
You should make it protected
instead of private
.
Private确实意味着您已经定义了该方法的类的私有;甚至子类也看不到私有方法。
Private really means private to the class you've defined the method in; even subclasses don't see private methods.
这篇关于无法声明私有的抽象方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!