当前位置: 首页 > 面试题库 >

无法将抽象方法声明为私有

柯乐池
2023-03-14
问题内容

我想这样做,但我不能。这是我的情况和理性。我有一个用于测试用例的抽象类,该类具有一个称为test()的抽象方法。test()方法由子类定义;它应使用特定应用程序的逻辑来实现,例如CRMAppTestCase extends CompanyTestCase。我不希望直接调用test()方法,我希望超类调用test()方法,而子类可以调用调用此方法的方法(并且还可以进行其他工作,例如设置当前例如在执行测试之前的日期时间)。示例代码:

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

然后扩展这个。

public class CRMAppTestCase extends CompanyTestCase {

    public void test() {
        //test logic here
    }

}

然后调用它。

TestCaseResult result = new CRMAppTestCase().performTest();

问题答案:

私有方法不是多态的(您不能继承它们),因此将私有方法抽象化是没有意义的。将方法抽象化意味着您必须在子类中重写并实现它,但是由于您不能重写私有方法,因此也不能使它们抽象化。

您应该protected代替它private

私有实际上意味着对您在其中定义了方法的类是私有的。甚至子类也看不到私有方法。



 类似资料:
  • 问题内容: 今天,我使用了Eclipse的“拉接口”重构功能来创建基于现有类的接口。该对话框提供了将新界面的所有新方法创建为“抽象”方法的功能。 那会有什么好处? 我认为,允许您将接口方法声明为抽象的事实是该语言的多余且无害的功能,因此不建议特别提倡。 为什么Eclipse支持这种样式,或者为什么有人自愿选择支持这种样式? 澄清:我不是在问为什么接口方法是抽象的,这是显而易见的。我想问为什么人们会

  • 问题内容: 我了解抽象类中的方法都可以是抽象的,也可以不是。但是,为什么不能在“普通”的非抽象类中创建抽象方法呢? 在此先感谢您的解释! 问题答案: 抽象 方法从根本上说,该方法没有实现,需要在 子类中 实现。但是,如果您在 非抽象 类中具有 抽象 方法,则可以实例化该类并获取一个对象,该对象将具有未实现的方法,您将无法调用该方法。 __

  • 问题内容: 这是我的代码,假设可以在按下按钮时更改一些文本:- 用下划线标记,它给我一个错误“类必须声明为抽象或实现抽象方法”。该代码大部分是从互联网上复制的,并且可以正常工作。可能仅是Android Studio错误。我如何使它工作? 问题答案: 必须实现该函数,否则您的类应该是抽象的,以便可以在某些子类中实现您的函数。但是在您的情况下,您犯了一个拼写错误。应该代替;

  • 问题内容: 将接口声明为抽象有什么意义?接口方法也是如此。有什么意义吗? 例如。 问题答案: 您在哪里遇到过已发布的代码块,任何旧的Java代码库? 这就是 JLS不得不说: 9.1.1.1抽象接口: 每个接口都是隐式抽象的。该修饰符已过时,不应在新程序中使用。 9.4抽象方法声明: 为了与Java平台的较早版本兼容,出于风格考虑,允许但不鼓励为接口中声明的方法冗余地指定abstract修饰符。

  • 假设我有一个叫做book的类,它是抽象的,有一个私有变量price,它的getter方法也是抽象的。 现在让我们假设我有一个旧的Book类,它继承了Book的所有属性,但也有一个与之相关联的年龄。另外,我希望这个类从它的父类重写getPrice方法。这就是我陷入困境的地方,因为price变量是私有的,而父类有一个抽象的getter方法。 谢谢。

  • 6.1. 方法声明 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 下面来写我们第一个方法的例子,这个例子在package geometry下: gopl.io/ch6/geometry package geometry import "math" type Point struct{ X, Y floa