有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在重写时只调用“超级”实现有意义吗?

这是一个关于Java编程世界的奇怪问题

假设我的代码中有这个

public interface IDoSomethingAndSomethingElse {

    int doSomething();

    int doSomethingElse();

}


public abstract class AbstractDoSomethingAndSomethingElse implements IDoSomethingAndSomethingElse{

    public int doSomething() {
        return arcaneAndMysticalProceedings();
    }

    public abstract int doSomethingElse(); //thanks PM77-1
}

public class MyDoSomethingAndSomethingElse extends AbstractDoSomethingAndSomethingElse{

    @Override
    public int doSomething(){
        return super.doSomething();
    }

    public int doSomethingElse(){
        return mystiriousIncantation();
    }

}

我的问题是:在具体实现中是否有必要像这样覆盖doSomething()?有什么用吗?你能想出一个有用的用例吗

编辑:使我的问题更精确一点;如果我没有像上面那样(实际上没有添加任何内容),是否会有一些情况会有所不同


共 (1) 个答案

  1. # 1 楼答案

    不,没有功能上的区别

    我能想到的唯一区别是,在不重写它的情况下,该方法不是在该类上“声明”的,而是在超类上。例如:

    class A {
        void doSomething() {
        }
    
        static class B extends A {
            @Override
            void doSomething() {
               super.doSomething();
            }
        }
    
        static class C extends A {
        }
    
        public static void main(String[] args) {
            for(Method m : B.class.getDeclaredMethods())
                System.out.println(m.getName());
            for(Method m : C.class.getDeclaredMethods())
                System.out.println(m.getName());
        }
    }
    

    在该示例中,doSomething仅针对B.class列出