Costruttore sovraccarico è molto utile per i valori simulare predefiniti, o costruire un oggetto da un'istanza (copia) già esistente
Ecco un esempio:
public class Color {
public int R, G, B, A;
// base ctr
public Color(int R, int G, int B, int A) {
this.R = R;
this.G = G;
this.B = B;
this.A = A;
}
// base, default alpha=255 (opaque)
public Color(int R, int G, int B) {
this(R, G, B, 255);
}
// ctr from double values
public Color(double R, double G, double B, double A) {
this((int) (R * 255), (int) (G * 255), (int) (B * 255), (int) (A * 255));
}
// copy ctr
public Color(Color c) {
this(c.R, c.G, c.B, c.A);
}
}
Qui, il primo costruttore è molto semplice. Si specifica R, G, B & valore alfa per un colore.
Mentre questo è sufficiente per utilizzare la classe Color, si fornisce un secondo costruttore, liter, che assegna automaticamente 255 a alpha se non specificato dall'utente.
Il terzo ctr mostra che è possibile creare un'istanza dell'oggetto Color con il doppio compreso tra 0 e 1. anziché i numeri interi.
L'ultimo accetta un Colore come argomento univoco, copia l'oggetto specificato.
I vantaggi si trovano anche nel fatto che il primo costruttore viene sempre chiamato, e puoi usarlo per contare manualmente le tue istanze. Diciamo che avete un attributo private static int count=0
, è possibile tenere traccia del numero di istanza di colore in questo modo:
// base ctr
public Color(int R, int G, int B, int A) {
this.R = R;
this.G = G;
this.B = B;
this.A = A;
++count;
}
count
viene incrementato da qualsiasi costruttore.
molto bella domanda! –
La reputazione di Schildt non va bene quando si parla di Java? Ricordo che era fondamentalmente una risata quando ha provato a scrivere libri su C e C++ ... – cHao
Il libro di Schildt su Java è buono. Non so quali sono quelli di C e C++. Questo libro Java parte dal molto semplice. Quindi per qualcuno, che è nuovo a OOP e Java, è davvero illuminante. –