Java ООП определяет определение конкретного метода в определении общего метода

#java #oop

#java #ооп

Вопрос:

Предположим, у меня есть CommonClass класс, который отображает то, что является общим для всех других файлов классов:

 public class CommonClass {
   public static void displayFoo() {
      ... // printlns here
      displaySpecific(); // Among all files made common by this method, I
                         // want to display something different among the other files
      ... // printlns here
   }
}
  

Я намерен назвать это следующим образом:

 // Filename: fileA.java

public class FileA {
    public static void myFunc() {
         CommonClass.displayFoo();
         // however, I should have a specific definition
         // for the displaySpecific()
         // method. Should I use interfaces? How should it be structured.
    }
    // displaySpecific method here
}
  

Другой файл:

 // Filename: fileB.java

public class FileB {
    public static void myFunc() {
         CommonClass.displayFoo();
         // however, I should have a specific definition
         // for the displaySpecific()
         // method. Should I use interfaces? How should it be structured.
    }
    // displaySpecific method here
}
  

и так далее…

Основным может быть это…

 public class MyMain {
   public static void main(String[] args) {
      FilaA.myfunc();
      System.out.println("");
      FileB.myfunc();
      System.out.println("");
      ... and so on...
   }
}
  

Это предполагаемый результат:

 Common String Common String Common Common Common Common Common 
Common Common Common Common Common Common Common 
This is File A
Common String Common String Common Common Common Common Common 
Common Common Common Common Common Common Common 

Common String Common String Common Common Common Common Common 
Common Common Common Common Common Common Common 
This is File B
Common String Common String Common Common Common Common Common 
Common Common Common Common Common Common Common 
  

Как я должен это сделать?

Комментарии:

1. Отредактированный вопрос.. Извините, если неясно.

Ответ №1:

Если вам нужны разные определения displayFoo() для каждого класса, то они должны быть функциями класса. Ваша идея интерфейса, вероятно, является тем путем, которым вы хотите пойти.

 public class FileB implements Displayable {
    public static display() {
        // Implementation-specific display
// etc.
  

Затем вы просто вызываете display() свои отображаемые объекты:

 for (Displayable d : displayables) {
    d.display();
}
  

Однако в вашем примере вам на самом деле не нужен интерфейс или что-либо еще, потому что вы вызываете, myfunc() который, в свою очередь, вызовет собственный класс display() .

Вы могли бы создать что-то вроде этого:

 public class DisplayUtil {
    public static void display(FileA f) {
        // etc.
    }

    public static void display(FileB f) {
        // etc.
    }
}
  

Не большой поклонник шаблона, но если у вас нет доступа к исходному источнику, например, или они являются конечными классами (я смотрю на вас, java.lang.String ), это может быть более удобным вариантом.