8

只有很少的时间来搜索这些东西,我看不到任何涵盖我的特定场景的东西。

我正在使用第 3 方界面。让我们说一下它如下:

    public interface interface1
    {
        public String getVar1();

        public void  method1();

        public void method2();

    }

我需要创建许多使用这个接口的类,但是“method2”的实际方法实现会有所不同,因为“method1”和“getVar1”总是相同的代码。

有没有办法创建一个实现接口但只将“method2”的实现强制到子类的抽象基类?

我试过

public abstract @Override void method2

但是,虽然这在 Netbeans 的设计时是“可接受的”(不知道 Eclipse 的行为是否不同),但在编译时却抱怨需要实现 method2。

如果不可能,很公平,我只需要检查一下。

谢谢

4

5 回答 5

19

您可以通过创建一个实现接口的抽象类来做到这一点。这个抽象类的任何子类都需要实现任何尚未定义的接口方法。

public abstract class AbstractInterface implements interface1 {
    @Override
    public String getVar1() {

    }

    @Override
    public void method1() {

    }
}
public class Implementation extends AbstractInterface {
    @Override
    public void method2() {

    }
}

请参阅:关于抽象类的 Java 教程

于 2013-09-03T10:48:06.960 回答
2

You can create an abstract class which does not implement method2()

public abstract class AbstractImplementation implements interface1 {
    public String getVar1() { 
      // implementation ..
    }

    public void  method1() {
      // implementation ..
    }

    // skip method2
}

Then create multiple implementations:

public class Implementation1 extends AbstractImplementation {
    public void method2() {
      // implementation 1
    }
} 

public class Implementation2 extends AbstractImplementation {
    public void method2() {
      // implementation 2
    }
}

...
于 2013-09-03T10:50:26.847 回答
0

You can have an abstract Class that provides implementation for "method 1" and "getVar1" but decalre method2 as abstract in this Class.

Now Inherit this Abstract Super Class in all your other Classes!

Like

public interface interface1 {

    public void getVar1();

    public void method1();

    public void method2();

}

public abstract class test implements interface1 {

    @Override
    public void getVar1() {
        // TODO Auto-generated method stub

    }

    @Override
    public void method1() {
        // TODO Auto-generated method stub

    }

    @Override
    public abstract void method2();


}

public class test1 extends test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

    @Override
    public void method2() {
        // TODO Auto-generated method stub

    }

}
于 2013-09-03T10:48:49.053 回答
0

在这种情况下,您在接口中有 3 个抽象方法,您可以覆盖一个或两个方法,其他方法将保持为抽象

abstact class PartialImplementationDemo implements interface1 {
  @Override
  public void method1() {
    // override method1() here
  }

  // leave other methods as abstract
  abstract public void method2();
  abstract public String getVar1();
}
于 2017-11-05T17:45:06.057 回答
0
interface I1
{
    public void  Method1();
    public void Method2();
}
abstract class A implements I1
{
    public void Method1()
    {
         System.out.println("In  Method 1");
    }

    abstract public void Method3();
}
class B extends A    //Inherits class A 
{
    public void Method2()
    {
         System.out.println("In Method 2");
    }
    public void Method3()
    {
         System.out.println("In Method 3");
    }
}
public class Main 
    {
     public static void main(String args[])
        {
            B b1=new B();
            b1.Method1();
            b1.Method2();
            b1.Method3();
        }            
    }
于 2019-03-12T13:28:47.977 回答