无法声明私有的抽象方法 [英] Can't declare an abstract method private

查看:81
本文介绍了无法声明私有的抽象方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这样做,但我做不到。这是我的情景和理性。我有一个测试用例的抽象类,它有一个名为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆