2014-09-08 1 views
1

Я не могу скомпилировать приведенный ниже код, Java всегда выдает ошибку. Можете ли вы, пожалуйста, помочь мне (P.S: Я новичок в Java, еще на этапе обучения). Если где-нибудь, я написал код неправильно, пожалуйста, помогите мне в исправлении его, чтобы я мог хорошо его изучить.Ошибка металирования Java «<Class Name> не является абстрактным и не отменяет абстрактного метода в <Interface>»

Ошибка Метательное (4): 1. Добавление не является абстрактным и не переопределяет абстрактный метод Div() в Calci

  1. Вычитание не является абстрактным и не переопределяет абстрактный метод Див() в Calci

  2. Отдел не является абстрактным и не переопределяет абстрактный метод Div() в Calci

  3. Умножение не является абстрактным и не переопределяет абстрактный метод Div() в Calci

    import java.util.Scanner; 
    
    interface calci  
    
    { 
    
    
        void add(); 
        void sub(); 
        void mul(); 
        void div(); 
    } 
    

Добавление класса

class addition implements calci 

{ 

public void add()  

    { 
     System.out.println("Enter two numbers:"); 
     Scanner scn = new Scanner(System.in); 
     int n = scn.nextInt(); 
     int n1= scn.nextInt(); 
     int result = n+n1; 
     System.out.println("The Result of the two numbers is:"+result); 
    } 
} 

класс Вычитание

class subtraction implements calci 

{ 

    public void sub()`enter code here` 
    { 
     System.out.println("Enter two numbers:"); 
     Scanner scn = new Scanner(System.in); 
     int n = scn.nextInt(); 
     int n1= scn.nextInt(); 
     int result = n-n1; 
     System.out.println("The Result of the two numbers is:"+result); 
    } 
} 

класс умножение деление

class multiplication implements calci 

{ 

    public void mul() 
    { 
     System.out.println("Enter two numbers:"); 
     Scanner scn = new Scanner(System.in); 
     int n = scn.nextInt(); 
     int n1= scn.nextInt(); 
     int result = n*n1; 
     System.out.println("The Result of the two numbers is:"+result); 
    } 
} 

класс

class division implements calci 

{ 

    public void div() 
    { 
     System.out.println("Enter two numbers:"); 
     Scanner scn = new Scanner(System.in); 
     int n = scn.nextInt(); 
     int n1= scn.nextInt(); 
     int result = n/n1; 
     System.out.println("The Result of the two numbers is:"+result); 
    } 
} 

класс calculator1

class calculator1 

{ 

    public static void main(String[] args) 
    { 
     int i =0; 
     addition a1 = new addition(); 
     subtraction s1 = new subtraction(); 
     multiplication m1 = new multiplication(); 
     division d1 = new division(); 
     System.out.println("Enter Your Name:"); 
     Scanner scn = new Scanner(System.in); 
     String a = scn.next(); 
     System.out.println("Good Morning!"+a); 
     System.out.println(); 
     System.out.println("Please choose option from below"); 
     System.out.println(); 
     System.out.println("1.Addition 2.Subtraction 3.Multiplication 4.Division"); 
     int option = scn.nextInt(); 
     while (i!=0) 
     { 
     if (option==1) 
     { 
      a1.add(); 
     } 
     else if (option == 2) 
     { 
      s1.sub(); 
     } 
     else if (option == 3) 
     { 
      m1.mul(); 
     } 
     else if (option == 4) 
     { 
      d1.div(); 
     } 
     else 
     { 
      System.out.println("Please enter valid number"); 
     } 
     } 
     System.out.println("Do you wish to continue"); 
     int b = scn.nextInt(); 
     if (b==0) 
     { 
      System.out.println("Thanks for using the calculator Program"+a); 
      System.out.println("Have a great day!"); 
     } 
    } 


} 
+0

Это не так, как интерфейсы работают на Java. Вы должны реализовать все четыре метода в каждом классе. Не в общей сложности четыре класса, которые реализуют методы один между ними. – Thilo

+3

Я думаю, вместо того, чтобы создавать 4 метода в интерфейсе, вы должны просто создать метод работы(). Поэтому каждому классу, который его реализует, нужно только выполнить метод работы (Multi, Add, Sub и Div class) – Rudy

ответ

1

Ну как ошибка говорит - некоторые классы, которые реализуют интерфейс calci не реализовать все методы этого интерфейса. Когда вы создаете класс, который реализует интерфейс, вам необходимо реализовать все методы из этого интерфейса, а не только те, которые вам интересны. В этом весь смысл интерфейсов. В противном случае вы не сможете кодировать интерфейсы, как, например, calci test = getCalciInstance().XXX(), где XXX() - это метод, объявленный в calci, возможно, не реализован в зависимости от того, какой экземпляр реализации getCalciInstance() вернется!

Таким образом, все ваши классы должны реализовать следующие методы:

void add(); 
void sub(); 
void mul(); 
void div(); 
1

При реализации интерфейса необходимо реализовать все методы этого интерфейса в реализующем классе.

В вашем примере вы должны реализовать add(), sub(), mul() и div() в любом классе, который реализует интерфейс calci

0

Вы, наверное, хотите, чтобы прочитать немного интерфейсов. Они являются одним из самых сильных аспектов Java и объектно-ориентированного дизайна в целом.

Если вы создаете интерфейс под названием «calci», вы создаете контракт, который любой класс, реализующий интерфейс, будет реализовывать то, что вы определили в calci. Поэтому вы можете переосмыслить, как это работает в настоящее время.

Чтобы описать, как это работает, измените интерфейс, чтобы иметь только один метод, называемый «выполнить». Теперь, в реализации классов сложения, вычитания, умножения и деления, создайте метод, также называемый «выполнить». Вы можете назвать это почти чем-либо другим, кроме «выполнить», но сделать его признаком того, что вы чувствуете, что все классы, которые реализуют calci, или другие интерфейсы, которые расширяют calci, должны гарантировать.

Тогда можно будет сделать:

calci addition = new addition(); 
addition.perform(); 

calci multiplication = new multiplication(); 
multiplication.perform(); 

т.д.

Вы можете использовать аннотацию @Override на методе реализующего, чтобы убедиться, что опечатками пойманы в вашей IDE (например, Eclipse) ,

Смежные вопросы

 Смежные вопросы