Shape.java
Abstrakte Klasse oder öffentliche Methode mit Schnittstelle
public interface Shape {
String draw();
void calcSomething();
}
Square.java
public class Square implements Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
public void calcSomething() {
}
}
Wenn ich ein interface
implementieren, die Methode, die ich muss public
sein umgesetzt.
Ich möchte draw()
public method aber calcSomething()
privat oder geschützt machen.
Ich bin durch Interfaces in Java: cannot make implemented methods protected or private gegangen. Und es nicht gerade Weg, um diese
Anstatt also zu tun Schnittstelle verwenden Ich plane abstrakte Klasse
Shape.java
mit abstrakten Klasse
public abstract class Shape {
abstract public String draw();
abstract protected void calcSomething();
}
Square.java
zu verwenden, die Shape
implementiert abstrakte Klasse
public class Square extends Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
protected void calcSomething() {
}
}
Welches sollte ich wählen. Sollte ich Schnittstelle und machen den calcSomething()
öffentlichen oder sollte ich verwenden abstrakte Klasse und machen die calcSomething()
geschützt
Meinung: Ich würde die zweite verwenden, um die Formkoordinaten selbst in einer 'List' oder ähnlichem speichern zu können.Eine abstrakte Klasse würde jedoch nur Sinn ergeben, wenn Sie Informationen für diese 'Shape' speichern wollen, während Sie für die erbenden Klassen Platz für 'abstrakte' Implementierungen lassen. Wenn ich als Seitenknoten die Methode 'draw' lesen würde, würde ich eher erwarten, dass sie etwas zeichnet, anstatt nur eine' String' zurück zu geben. Ich könnte erwägen, diese Methode umzubenennen, um darzustellen, was sie wirklich macht. – SomeJavaGuy
Warum ist 'calcSomething' privat, wenn es in der Schnittstelle ist? –
Ich habe eine andere Klasse, die Shape implementiert. Alle verwenden denselben Methodennamen, um etwas zu berechnen. Ich wollte diese Methode nur an der Schnittstelle hinzufügen. @ ReutSharabani. Ich könnte falsch liegen, so zu denken. Bitte korrigieren Sie mich, wenn ich falsch liege –