#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
), это может быть более удобным вариантом.