【问题标题】:Implementing interface methods in an abstract class在抽象类中实现接口方法
【发布时间】:2014-04-27 16:30:05
【问题描述】:

我有一个扩展抽象类的具体类,而抽象类又扩展了一个抽象类。这个顶级类实现了一个接口。是否可以在顶层抽象类中实现接口方法,让具体子类不用?

另外,如果接口方法采用 Object 类型作为它的参数,我可以让顶级抽象类中的实现采用另一种类型(这对我来说似乎是正确的),还是我必须使用完全相同的方法签名?

【问题讨论】:

    标签: java interface abstract


    【解决方案1】:

    能不能在顶层抽象类中实现接口方法,让具体子类不用?

    是的

    另外,如果接口方法采用 Object 类型作为其参数,我可以让顶级抽象类中的实现采用另一种类型(这对我来说似乎是正确的),还是我必须使用完全相同的方法签名?

    它必须是相同的签名。但是,如果您愿意并且更详细地解释您的计划,您可以使用泛型进行欺骗。

    【讨论】:

      【解决方案2】:

      为你的第一个问题

      能不能在顶层抽象类中实现接口方法,让具体子类不用?

      如果它是所有子类的共同特征,你可以而且应该这样做。

      下面是同样的例子

      interface X{
          void show();
      
      }
      abstract class A implements X{
          public void show(){
              System.out.println("show");
          }
      
      }
      
      abstract class B extends A{
      
      }
      
      class C extends B{
      
      }
      

      【讨论】:

        【解决方案3】:

        第二个问题

        不,签名必须始终相同。

        所以下面的程序说明了它

        interface X{
        
            void print(Object obj);
        
        }
        abstract class A implements X{
        
            @Override
            public void print(Object obj) {
                System.out.println("print");
        
            }
        
        }
        

        如果更改子类中的类型,以下程序将无法编译

        interface X{
        
            void print(Object obj);
        
        }
        abstract class A implements X{
        
            @Override
            public void print(A obj) {
                System.out.println("print");
        
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2020-02-04
          • 2011-11-20
          • 2018-01-21
          • 1970-01-01
          • 1970-01-01
          • 2012-07-17
          • 1970-01-01
          • 2012-03-14
          • 1970-01-01
          相关资源
          最近更新 更多