This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:local_inner_classes [2017/04/03 00:05] gthanos [Τοπικές κλάσεις] |
java:local_inner_classes [2021/04/12 04:54] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Τοπικές κλάσεις ====== | ||
| - | Μπορείτε να ορίσετε μία κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, | ||
| - | |||
| - | Ο λόγος που πιθανόν θέλει κάποιος προγραμματιστής να ορίσει μία τοπική κλάση είναι ότι η λειτουργικότητα που υλοποιεί η τοπική κλάση αφορά μόνο τη συγκεκριμένη μέθοδο μέσα στην οποία δηλώνεται. | ||
| - | |||
| - | Δείτε το παρακάτω παράδειγμα κώδικα. | ||
| - | |||
| - | <code java LocalClassExample.java> | ||
| - | public class LocalClassExample { | ||
| - | | ||
| - | static String regularExpression = " | ||
| - | | ||
| - | public static void validatePhoneNumber(String number1, | ||
| - | | ||
| - | final int numberLength = 10; | ||
| - | |||
| - | class PhoneNumber { | ||
| - | | ||
| - | private String formattedPhoneNumber = null; | ||
| - | |||
| - | PhoneNumber(String phoneNumber){ | ||
| - | regularExpression = " | ||
| - | String currentNumber = phoneNumber.replaceAll( | ||
| - | regularExpression, | ||
| - | if (currentNumber.length() == numberLength) | ||
| - | formattedPhoneNumber = currentNumber; | ||
| - | else | ||
| - | formattedPhoneNumber = null; | ||
| - | } | ||
| - | |||
| - | public String getNumber() { | ||
| - | return formattedPhoneNumber; | ||
| - | } | ||
| - | | ||
| - | public String toString() { | ||
| - | if(formattedPhoneNumber == null) | ||
| - | return " | ||
| - | else | ||
| - | return formattedPhoneNumber; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | System.out.println(number1 + ": " + new PhoneNumber(number1)); | ||
| - | System.out.println(number2 + ": " + new PhoneNumber(number2)); | ||
| - | } | ||
| - | |||
| - | public static void main(String... args) { | ||
| - | LocalClassExample.validatePhoneNumber(" | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης από την τοπική κλάση ===== | ||
| - | |||
| - | Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, | ||
| - | |||
| - | ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου ===== | ||
| - | |||
| - | Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. Για παράδειγμα η μεταβλητή numberLength δηλώνεται // | ||
| - | <code java> | ||
| - | final int numberLength = 10; | ||
| - | </ | ||
| - | Αν βγάλετε τα σχόλια από την γραμμή 15 '' | ||
| - | < | ||
| - | LocalClassExample.java: | ||
| - | numberLength = 7; | ||
| - | </ | ||
| - | |||
| - | Ομοίως αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους // | ||
| - | |||
| - | <WRAP tip 80% center round> | ||
| - | Στην **Java 8** και μεταγενέστερα εισάγεται η έννοια της // | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||