在实现具有抽象类的接口时声明什么(不)?

Hen*_*ing 7 java interface class declaration abstract

我有一个接口A,我必须提供一些不同的实现.但是,这些实现共享一些辅助方法,因此我将这些方法移动到抽象基类.

Interface A {
    void doX();
}

abstract Class B implements A {
    protected void commonY() {
        // ...
    }

    @Override
    public abstract void doX();
}

Class C extends B {
    @Override
    public void doX() {
        // ...
    }
}

Class D extends B {
    @Override
    public void doX() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的代码按预期工作,但我有几个问题:

  • 我应该在B类中声明抽象方法doX()吗?为什么不)?

  • 我是否还应该在C类和D类上明确声明"实现A"?为什么不)?

kgi*_*kis 8

我认为最好这样做如下:

Interface A {
        void doX();
}

abstract Class B {
        protected void commonY() {
                // ...
        }
}

Class C extends B implements A{

        public void doX() {
                // ...
        }
}

Class D extends B implements A{

        public void doX() {
                // ...
        }
}
Run Code Online (Sandbox Code Playgroud)

您不应该将接口(方法的签名)与实现混合在一起.