Ist es OK, um einen "leeren" Klasse, die eine andere Klasse erweitert?

Sagen wir, ich habe eine Klasse Foo dass eine Reihe von Logik und eine andere Klasse Bar die im wesentlichen die gleichen. Jedoch, wie Foo und Bar sind unterschiedliche (aber Verwandte) Personen brauche ich die Differenz ersichtlich sein aus meinem code (d.h. ich kann Ihnen sagen, ob eine Instanz ist eine Foo oder eine Bar)

Als ich war whacking diese zusammen, ohne viel dachte, ich landete mit der folgenden:

public class Foo {
  /* constructors, fields, method, logic and what-not */
}

public class Bar extends Foo {
  /* nothing here but constructors */ 
}

Ist das OK? Ist es besser zu machen Bar eine composite-Klasse? e.g:

public class Bar {
  private Foo foo;

  /* constructors and a bunch of wrapper methods that call
     into foo */
}

Oder auch, wenn wir schon dabei sind, etwas mehr low-tech:

public class Foo {
  /* constructors, fields, method, logic and what-not */

  private boolean isABar; //Could be an enum
}

Was denkst du? Wie gehst du mit diesen "marker-Klassen'?


Als ein Beispiel, wie mein code Mai Wunsch zu behandeln Foo und Bar anders, mein code müsste in der Lage sein, um Dinge zu tun wie List<Foo> und List<Bar>. Ein Foo konnte nicht gehen, in eine List<Bar> - und Umgekehrt.

  • Gut, dann, meine Lösung der AbstractFoo ist perfekt! Sie müssen nur eine Liste mit<AbstractFoo>, und Sie können sowohl " Foo " und " Bar zu.
  • "Ein Foo konnte nicht gehen, in eine Liste<Bar> und Umgekehrt." - aber du bist der Punkt steht immer noch da Foo und Bar sind eigene Implementierungen
  • Können Sie bitte erläutern, was das bedeutet: sagen wir, ich habe eine Klasse Foo, die eine Reihe von Logik und anderen Klasse-Bar, die im wesentlichen die gleichen << das ist doch das gleiche oder nicht?
  • John: mein code neesd in der Lage sein, den Unterschied zu kennen. Als ein erfundenes Beispiel, wenn ich ein 'GoodInteger' und ein 'BadInteger'; Sie hätte den gleichen code, definiert Sie aber meinen code wissen muss, um die guten von den schlechten.
InformationsquelleAutor SCdF | 2008-09-27
Schreibe einen Kommentar