相关疑难解决方法(0)

是否在Java中继承了静态方法?

我正在阅读Khalid Mughal的程序员Java™SCJP认证指南.

在继承章节中,它解释了这一点

成员的继承与其声明的可访问性密切相关.如果超类成员可以通过其子类中的简单名称访问(不使用任何额外的语法,如super),则该成员被视为继承

它还提到静态方法不是继承的.但是下面的代码非常好:

class A
{
    public static void display()
    {
        System.out.println("Inside static method of superclass");
    }
}

class B extends A
{
    public void show()
    {
        // This works - accessing display() by its simple name -
        // meaning it is inherited according to the book.
        display();
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能display()在课堂上直接使用B?更重要的是,B.display()也有效.

本书的解释是否仅适用于实例方法?

java inheritance static

134
推荐指数
5
解决办法
13万
查看次数

编写单元测试Java中的继承类

考虑Java中的以下简单类层次结构

class Foo {
    protected void someMethod(Bar bar) {
        ...
    }

    protected void someOtherMethod(Baz baz) {
        ...
    }
}

class EnhancedFoo extends Foo {
    @Override
    protected void someMethod(Bar bar) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在开始为这两个类编写JUnit单元测试.由于方法的合同对于someMethod两个类都是相同的,因此我需要两个类基本上完全相同的测试方法(关于someMethod方法),这导致代码重复.使用多个覆盖方法为更丰富的类层次结构执行此操作时,感觉继承对可测试性不利.

此外,即使该方法someOtherMethod没有被覆盖ExtendedFoo,我需要包括相关的测试,ExtendedFoo因为这仍然是合同,这个扩展的类和单元测试应该测试这个.

是否有其他一些在Java中组织层次结构的方法更适合可测试性?是否有一些JUnit构造可以帮助缓解这个问题?

java junit unit-testing

5
推荐指数
1
解决办法
1227
查看次数

标签 统计

java ×2

inheritance ×1

junit ×1

static ×1

unit-testing ×1