Μπορεί μια αφηρημένη κλάση να έχει κατασκευαστή;
Αν ναι, πώς μπορεί να χρησιμοποιηθεί και για ποιους σκοπούς;
Ναι, μια αφηρημένη κλάση μπορεί να έχει έναν κατασκευαστή. Σκεφτείτε αυτό:
abstract class Product {
int multiplyBy;
public Product( int multiplyBy ) {
this.multiplyBy = multiplyBy;
}
public int mutiply(int val) {
return multiplyBy * val;
}
}
class TimesTwo extends Product {
public TimesTwo() {
super(2);
}
}
class TimesWhat extends Product {
public TimesWhat(int what) {
super(what);
}
}
Η υπερκλάση Προϊόν
είναι αφηρημένη και έχει έναν κατασκευαστή. Η συγκεκριμένη κλάση TimesTwo
έχει έναν κατασκευαστή που απλά κωδικοποιεί την τιμή 2. Η συγκεκριμένη κλάση TimesWhat
έχει έναν κατασκευαστή που επιτρέπει στον καλούντα να καθορίσει την τιμή.
Οι αφηρημένοι κατασκευαστές χρησιμοποιούνται συχνά για την επιβολή περιορισμών ή αναλλοίωτων της κλάσης, όπως τα ελάχιστα πεδία που απαιτούνται για την εγκατάσταση της κλάσης.
ΣΗΜΕΙΩΣΗ: Καθώς δεν υπάρχει προεπιλεγμένος (ή χωρίς όρισμα) κατασκευαστής στη γονική αφηρημένη κλάση, ο κατασκευαστής που χρησιμοποιείται στην υποκλάση πρέπει να καλέσει ρητά την κλάση τον κατασκευαστή της γονικής υποκατηγορίας.
Ναι, μπορεί να έχει έναν κατασκευαστή, ο οποίος ορίζεται και συμπεριφέρεται ακριβώς όπως ο κατασκευαστής οποιασδήποτε άλλης κλάσης. Μόνο που οι αφηρημένες κλάσεις δεν μπορούν να ενσαρκωθούν άμεσα, παρά μόνο να επεκταθούν, οπότε η χρήση γίνεται πάντα από τον κατασκευαστή μιας υποκλάσης.
Σκεφτείτε αυτό:
abstract class Product {
int value;
public Product( int val ) {
value= val;
}
abstract public int multiply();
}
class TimesTwo extends Product {
public int mutiply() {
return value * 2;
}
}
Η υπερκλάση είναι αφηρημένη και έχει έναν κατασκευαστή.