在Java中的同一个接口中实现多个类?

时间:2017-11-27 06:22:38

标签: java class interface override

我有多个类,每个类在每个类中实现多个不同的方法。现在问题陈述是我希望在另一个类文件中使用所有这些方法(可能大约200个这样的不同类文件/方法),这些方法来自上面的类文件。

我认为如果我实现了一个列出了所有这些不同方法的接口,那么我只是调用/ import / reference那个单一接口并且可以使用所有方法吗?但我被卡住了,因为这个解决方案似乎不起作用。

与上述工作相反(即单个类实现2个接口:http://tutorials.jenkov.com/java/interfaces.html)。希望检查单个接口是否可以使用多个类,而没有在接口内引用每个类中声明所有方法的开销?

作为一个例子:有没有什么方法可以在同一个界面中实现2个不同的类,而每个类都有自己的抽象类?好像这个类是抽象的,那么我无法在下面的例子中使用它的方法" Application"类:

Common commonClass = new ABC_FamilyGivenName();

如果ABC_FamilyGivenName类是抽象类,则不允许上述内容。

INTERFACE:

public interface Common {
    void ABC_GivenNames();
    void ABC_FamilyNames();
    void ABC_Gender();
    void ABC_BirthDay();
}



IMPLEMENTATION CLASSES:

public class ABC_FamilyGivenName extends Base implements Common {

    public void ABC_GivenNames(){
        // Implementation code
    }

    public void ABC_FamilyNames(){
        // Implementation code
    }
}

public class ABC_DOBGender extends Base implements Common {

    public void ABC_Gender(){
        // Implementation code
    }

    public void ABC_BirthDay(){
        // Implementation code
    }
}



USE IMPLEMENTED CLASS:
public class Application extends Base {

    Common commonClass = new ABC_FamilyGivenName();
    /* DO I NEED THIS? I THINK I DO, BUT CODE/JAVA SAYS I DO NOT
     * Common commonClass = new ABC_DOBGender();
     */

    public void ELP_C0050_PassportDetails(){
        commonClass.ABC_GivenNames();
        commonClass.ABC_FamilyNames();
        commonClass.ABC_DOB();
        commonClass.ABC_Gender();
    }
}

我有两个名为ABC_FamilyGivenName& ABC_DOBGender。 我创建了一个Common。接口。

我想在另一个名为Application的类中使用上述两个类中的方法。

使用当前的实现,Java希望我将@Override添加到ABC_FamilyGivenName& ABC_DOBGender:

IMPLEMENTATION CLASSES:

public class ABC_FamilyGivenName extends Base implements Common {

    public void ABC_GivenNames(){
        // Implementation code
    }

    public void ABC_FamilyNames(){
        // Implementation code
    }

    @Override
    public void ABC_BirthDay() {}

    @Override
    public void ABC_Gender() {} 
}

public class ABC_DOBGender extends Base implements Common {

    public void ABC_Gender(){
        // Implementation code
    }

    public void ABC_BirthDay(){
        // Implementation code
    }

    @Override
    public void ABC_GivenName() { }     

    @Override
    public void ABC_FamilyName() { }        
}

我可以避免上面的@Override,只使用第一个例子中给出的没有这些的类吗?

5 个答案:

答案 0 :(得分:1)

Java中的面向对象编程需要"覆盖"所有方法,如果您正在实现一个方法,否则您可能使用继承,因此不是所有方法都必须被覆盖。

在您的情况下,您可以将所有四种方法都放在父类Base中,然后继承它们。 然后不需要接口类或者创建两个不同的接口。

答案 1 :(得分:1)

要实现Java接口,您应该覆盖声明到接口中的所有抽象方法。它是界面的基本概念。这里interface Common所有四种方法都是抽象的,所以你应该覆盖它们。否则,Java编译器将抛出编译错误。因此,更好的方法是将界面分为两部分。 它是接口的契约性质,实现接口的子类应该具有接口的所有活动。这是使用接口的主要目的。

如果你不想覆盖接口的所有方法但是你需要使用接口作为每个类的引用,那么你可以使用具体的类而不是接口并继承具体的类来每个班级

答案 2 :(得分:0)

  

我可以避免使用上面的@Override,只使用没有这些的类   如第一个例子中给出的那样?

不,在java中你必须实现接口的所有方法,除非它的抽象类

作为建议,您可以创建两个单独的接口,

有关详细信息,请参阅:not implementing all of the methods of interface. is it possible?

答案 3 :(得分:0)

您可以为另一个名为Adapter class的类的接口的所有方法提供空的实现。您可以在ABC_FamilyGivenName类和ABC_DOBGender类中扩展该适配器类。

class Adaptor implements common
{
public void ABC_GivenNames() {
 }

 public void ABC_FamilyNames() {
 }

 public void ABC_Gender() {
 }

 public void ABC_BirthDay() {
 }
}

实施类别

        public class ABC_FamilyGivenName extends Adaptor{

            public void ABC_GivenNames(){
                // Implementation code
            }

            public void ABC_FamilyNames(){
                // Implementation code
            }

        }

        public class ABC_DOBGender extends Adaptor {

            public void ABC_Gender(){
                // Implementation code
            }

            public void ABC_BirthDay(){
                // Implementation code
            }

        }

答案 4 :(得分:0)

interface Icalculate{                 //interface
calculate(operand1:number,operand2:number):number
}

class Add implements Icalculate{     //addition
calculate(operand1: number, operand2: number): number{
 return (operand1 + operand2);       
    }
}

 class Sub implements Icalculate{       //subtraction
 calculate(operand1: number, operand2: number): number{
    return (operand1 - operand2);
  }
 }

class Mul implements Icalculate{           //multiplicationn
calculate(operand1: number, operand2: number): number{
    return(operand1*operand2);
 }
}

 class Div implements Icalculate{         //Division
  calculate(operand1: number, operand2: number): number{
    return(operand1/operand2);
   }
}  
  let a = new Add;
  let b = new Sub;
  let c = new Mul;
  let d = new Div;

  class Calculator {                   //main class
    operator: Icalculate;
    operand1: number;
    operand2: number;
    constructor(a: number, b: number, operator: Icalculate) {
    this.operand1 = a;
    this.operand2 = b;
    this.operator = operator;
    let op = this.operator;
    console.log(op.calculate(this.operand1, this.operand2));
    }
}   
const cal=new Calculator(1,1,a);