bazinga13 Δημοσ. 3 Μαρτίου 2014 Δημοσ. 3 Μαρτίου 2014 καλημερα φιλοι μου,ο νεος(δυστυχως οχι ηλικιακα) ξαναχτυπαει με πολλες αποριες προσπαθω να μαθω τις κλασεις και τους κατασκευαστες κτλ κτλ,λοιπον θελω να κανω ενα απλο προγραμμα που θα εκτυπωνει στην οθονη το ονομα το επιθετο και το ονοματεπιθετο package MyPackage; import java.util.*; public class MyClass { public String first_name; public String last_name; public String full_name; public MyClass(){ first_name = "iannis"; last_name = "tsoumas"; full_name = "iannis tsoumas"; } public String MyFirstName(){ return first_name; } public String MyLastName(){ return last_name; } public String MyFullName(){ return full_name; } public static void main(String[] args){ MyClass MyNameClass; MyNameClass = new MyClass(); System.out.println("My first name is "+MyNameClass.MyFirstName()); System.out.println("My last name is " +MyNameClass.MyLastName()); System.out.println("My full name is " +MyNameClass.MyFullName()); 2)θελω τωρα για να πειραματιστω λιγο με τις μεθοδους, η μεθοδος MyFirstName() να μην επιστρεφει το ονομα αλλα να ειναι void και να τυπωνει τα αποτελεσματα μεσα απο την μεθοδο οταν την καλω,ας πουμε ετσι void String MyFirstName(){ System.out.println("My first name is "+first_name);} και μου βγαζει το εξης μηνυμα λαθους void is an invalid type for the variable string return type for the method is missing γιατι πρεπει να εχει return αφου ειναι void και 3)θελω να δινω τα ονοματα εγω απ το πληκτρολογιο και να τα τυπωνω,οριστε ο κωδικας package MyPackage; import java.util.*; public class MyClass { public static String first_name; public static String last_name; public static String full_name; MyClass(String a,String b,String c){ first_name = a; last_name = b; full_name = c; } static String MyFirstName(String name){ return first_name; } static String MyLastName(String lastName){ return last_name; } static String MyFullName(String fullName){ return full_name; } public static void main(String[] args){ Scanner in = new Scanner(System.in); MyClass MyNameClass; MyNameClass = new MyClass(); System.out.println("Enter your first name "); String firstname = in.nextLine(); System.out.println("Enter your last name "); String lastname = in.nextLine(); System.out.println("Enter your full name "); String fullname = in.nextLine(); System.out.println("My first name is "+MyNameClass.MyFirstName(firstname)); System.out.println("My last name is " +MyNameClass.MyLastName(lastname)); System.out.println("My full name is " +MyNameClass.MyFullName(fullname)); } } το προβλημα ειναι εδω, στην δηλωση MyNameClass = new MyClass(); μου βγαζει το εξης μηνυμα the constructor MyClass is indefined add arguments to match MyClass(String,Srting,String) Change constructor MyClass(String,String,String)remove parameters string,string,string create constructor MyClass MyClass = new MyClass(first_name,first_name,first_name); και εδω System.out.println("My first name is "+MyNameClass.MyFirstName(firstname)); System.out.println("My last name is " +MyNameClass.MyLastName(lastname)); System.out.println("My full name is " +MyNameClass.MyFullName(fullname)); το μηνυμα λαθους που μου βγαζει ειναι το εξης the method MyFirstName should be access in a static way the method MyLastName should be access in a static way the method MyFullName should be access in a static way το ετρεξα,εδωσα τιμες απ το πληκτρολογιο και μου εβγαλε το εξης αποτελεσμα My first name is nullMy last name is nullMy full name is null
gon1332 Δημοσ. 3 Μαρτίου 2014 Δημοσ. 3 Μαρτίου 2014 Ας ξεκινήσουμε από τα προβλήματά σου: void String MyFirstName() { System.out.println("My first name is "+first_name); } Αυτό το λάθος πρόκειται μάλλον για λάθος απροσεξίας. Παρατήρησε το signature της μεθόδου που όρισες. Τι τύπου είναι; void String??? Επόμενο πρόβλημα: package MyPackage; import java.util.*; public class MyClass { public static String first_name; public static String last_name; public static String full_name; MyClass(String a,String b,String c){ first_name = a; last_name = b; full_name = c; } static String MyFirstName(String name){ return first_name; } static String MyLastName(String lastName){ return last_name; } static String MyFullName(String fullName){ return full_name; } public static void main(String[] args){ Scanner in = new Scanner(System.in); MyClass MyNameClass; MyNameClass = new MyClass(); System.out.println("Enter your first name "); String firstname = in.nextLine(); System.out.println("Enter your last name "); String lastname = in.nextLine(); System.out.println("Enter your full name "); String fullname = in.nextLine(); System.out.println("My first name is "+MyNameClass.MyFirstName(firstname)); System.out.println("My last name is " +MyNameClass.MyLastName(lastname)); System.out.println("My full name is " +MyNameClass.MyFullName(fullname)); } } Εδώ λοιπόν έχεις δηλώσει τον contructor να δέχεται τρία ορίσματα. Όταν τον καλείς όμως από την main, δεν του περνάς κάποια παράμετρο. Ιδανικά: MyNameClass = new MyClass(firstName, lastName, fullName); Τώρα πως θα μπορούσες να γράψεις τους παραπάνω κώδικες πιο σωστά ώστε να εκμεταλλεύσαι το OOP που σου προσφέρει η Java: Το πρόγραμμα θα μπορούσε να γίνει έτσι: package MyPackage; import java.util.*; public class MyClass { // Παρακάτω εξηγώ γιατί έβαλα τα fields private private String first_name; // Ένα όνομα αποτελείται από το μικρό (Γιάννης, Κώστας) private String last_name; // και το μεγάλο (Παπαδόπουλος, κ.α.) //public String full_name;// Άρα μία τέτοια κλάση χρειάζεται μόνο αυτά τα δύο fields // για να κρατήσει όλη την απαραίτητη γνώση. Παρατήρησε πως // το full_name προκύπτει από τη συνένωση των δύο παραπάνω. // Default Constructor // Όταν υλοποιούμε έναν constructor, πρέπει να ορίζουμε και τον default. public MyClass(void){ first_name = ""; last_name = ""; } // Custom Constructor // Θέλουμε γενικά τα προγραάμματά μας να είναι γενικά. Στη Java η αρχικοποίηση // fields γίνεται στον constructor. Συνήθως ο constructor λαμβάνει τιμές κατά // την κλήση του. public MyClass(String firstName, String lastName){ first_name = firstName; // Μπορεί να γραφτεί και this.first_name = firstName; last_name = lastName; // Μπορεί να γραφτεί και this.last_name = lastName; } // Αυτό που υλοποίησες είναι ένας accessor. Μέσω αυτό μπορείς να λάβεις τη τιμή // κάποιου Fields του αντικειμένου που έχεις δημιουργήσει. Η σύμβαση είναι, τέτοιες // μέθοδοι να ξεκινάνε με τη λέξη get: public String getFirstName(){ return first_name; // ή this.first_name } public String getLastName(){ return last_name; // ή this.last_name } // Συνήθως στη Java δε θέλουμε να γίνεται προσπέλαση κάποιου field απευθείας. Γι' αυτό // χρησιμοποιούμε τους accessors set. Αυτοί αναθέτουν μία τιμή στα fields. Τώρα μπορείς // να θέσεις τα fields σε private. Μόνο από τους accessors μπορείς να "δεις" τα fields public void setFirstName(String firstName){ first_name = firstName; // ή this.first_name } public void setLastName(String lastName){ last_name = lastName; // ή this.last_name } // Ορίστε μία όμορφη υλοποίηση της μεθόδου που επιστρέφει το full name // χρησιμοποιώντας τους accessors // Σημείωση: Αυτό θα μπορούσε να είναι και η υλοποίηση της μεθόδου toString. // Όταν τη συναντήσεις θα καταάβεις τι λέω public String MyFullName(){ return this.getFirstName() + " " + this.getLastName(); } public static void main(String[] args){ Scanner in = new Scanner(System.in); MyClass MyName; MyName = new MyClass(); System.out.println("Enter your first name "); MyName.setFirstName(in.nextLine()); System.out.println("Enter your last name "); MyName.setLastName(in.nextLine()); System.out.println("Your full name is " + MyName.getFullName()); } }
nilosgr Δημοσ. 3 Μαρτίου 2014 Δημοσ. 3 Μαρτίου 2014 Λοιπόν, η μορφή σύνταξης μιας μεθόδου στη java είναι κάπως έτσι: <access-modifier> <other-modifiers> <return-type> <methode-name>(<argument1>, <argument2> ...)Εξηγώ:<access-modifier> μπορεί να είναι public, protected, private ή κενό <other-modifiers> μπορεί να είναι static, abstract, final, volatile, synchronized κλπ (το αναφέρω κυρίως για λόγους πληρωτητας) <return-type> μπορεί να είναι int, byte, float, double, long, void ή κάποια κλάση/interface/enum Το methode-name και τα arguments είναι ίδια λογική -περίπου- με τη C. Στο πρώτο πρόβλημα σου, βάζεις για return type και void και String, γιαυτό και σου βάζει error. Στο δεύτερο πρόβλημα, δεν χρειάζεται το static. Απλώς κάνε μια μέθοδος κάπως σαν αυτή: public void setName(String name) { first_name = name; }Τα λάθη που συναντάς, αν έπαιρνες ένα βιβλίο δεν θα τα συναντούσες. Βλέπω ότι έχεις θέληση να μάθεις γιαυτό και σου προτείνω να πάρεις ένα βιβλίο για να μάθεις αυτά τα βασικά.Πχ τί θα μάθεις από ένα βιβλίο που στο ίντερνετ για να το βρεις θα πρέπει να ψάξεις επί τούτο γιαυτό: Ποια η διάφορα των public, protected, private "package protected"; Τί είναι το static; Πότε το χρησιμοποιώ; Τί είναι οι getters/setters; Ποια ορίσματα βάζω σ έναν κατασκευαστή; Τί κάνει η μέθοδος equals/hashCode; Και πολλά πολλά άλλα 1
gon1332 Δημοσ. 3 Μαρτίου 2014 Δημοσ. 3 Μαρτίου 2014 Λοιπόν, η μορφή σύνταξης μιας μεθόδου στη java είναι κάπως έτσι: <access-modifier> <other-modifiers> <return-type> <methode-name>(<argument1>, <argument2> ...)Εξηγώ:<access-modifier> μπορεί να είναι public, protected, private ή κενό <other-modifiers> μπορεί να είναι static, abstract, final, volatile, synchronized κλπ (το αναφέρω κυρίως για λόγους πληρωτητας) <return-type> μπορεί να είναι int, byte, float, double, long, void ή κάποια κλάση/interface/enum Το methode-name και τα arguments είναι ίδια λογική -περίπου- με τη C. Στο πρώτο πρόβλημα σου, βάζεις για return type και void και String, γιαυτό και σου βάζει error. Στο δεύτερο πρόβλημα, δεν χρειάζεται το static. Απλώς κάνε μια μέθοδος κάπως σαν αυτή: public void setName(String name) { first_name = name; } Σωστός, δεν το παρατήρησα! Δηλώνουμε ως static μία μέθοδο μόνο όταν θέλουμε να τη χρησιμοποιούμε ως γενικού σκοποού. Με το γενικού σκοπού εννοούμε ότι δεν είναι ανάγκη να συνδέεται με κάποιο αντικείμενο για να βγάλει κάποιο λογικό αποτέλεσμα. Το καλύτερο παράδειγμα είναι η κλάση Math. Με αυτά που σου είπε ο nilosgr θα σου δουλέψει το πρόγραμμα. Απλά δεν είναι και ο καλύτερος τρόπος για να το υλοποιήσεις. Όπως είπε και ο nilosgr θα μάθεις πολλά πράγματα πιο εύκολα και καλύτερα δομημένα με ένα βιβλίο. Όχι tutorials. Τα tutorials κρύβουν το πως δουλεύει κάτι, όπως κρύβουν και γιατί πολλά πράγματα τα κάνουμε έτσι όπως μας τα δείχνουν.
bazinga13 Δημοσ. 3 Μαρτίου 2014 Μέλος Δημοσ. 3 Μαρτίου 2014 σας ευχαριστω θερμα και του 2 για τον χρονο σας και τον κοπο σας,να ειστε καλα,πραγματι ειναι ενα μεγαλο θεμα αυτο το αν και κατα ποσο ειναι δυνατον να μαθεις μονο σου προγραμματισμο απο το ιντερνετ,ειναι παααααρα πολυ χρονοβορο,τρως απιστευτο χρονο για να βρεις κατι απλο που θα μπορουσε καποιος να στο πει σε πεντε λεπτα,σωστο αυτο που ειπες για την αγορα καποιου βιβίου,εχω ψαξει στην σελιδα του Παπασωτηριου αλλα δεν ξερω ποιο να διαλεξω,αν μπορειτε να μου προτεινεται εσεις καποιο βιβλιο θα το εκτιμουσα πολυ,πραγματικα πριν δεκα χρονια που ασχοληθηκα με λιγο C μου ειχε τοτε ο φιλος μου(προγραμματιστης) οτι οι object oriented γλωσσες ειναι πολυ πιο απλες και εχουν λυμενα αρκετα προβληματα που συναντουσα στην C,σιγουρα θα εχει τους λογους του να το λεει απλα εγω δεν μπορω ακομα να το καταλαβω,εχω δεκα μερες που ασχολουμαι και ακομα δεν μπορω να καταλαβω ακριβως την νοοτροπια του αντικειμενοστραφη προγραμματισμου,την λογικη δηλαδη της κλασσης και του αντικειμενου,που αποσκοπει?που διευκολυνει τα πραγμματα αυτος ο τροπος προγραμματισμου?αν και εχω διαβασει λιγο θεωρια πριν αρχισω αλλα οταν μου λεει οτι μια κλασση ειναι μια λογικη αφαιρετικη οντοτητα πως μπορω να ερμηνευσω αυτην την τοποθετηση?μου ειναι δυσκολο 1)Ας πουμε γιατι πρεπει να δηλωνω εναν κατασκευαστη(μου απαντησε πολυ ωραια ενα παιδι σε προηγουμενο ποστ) 2)γιατι πρεπει να υλοποιω τοσες συναρτησεις για να κανω ενα απλο πραγμα? 3)αν πρεπει να γραψω τοσο κωδικα απλα για να τυπωσω ενα ονομα και ενα επιθετο? 4)Το παραπανω προγραμμα στην C θα το υλοποιουσα με τις μισες γραμμες κωδικα αν και δεν ξερω αν αυτο ειναι πλεονεκτημα στον προγραμματισμο,δεν ειμαι προγραμματιστης και δεν μπορω να κρινω τωρα αποριες, public MyClass(void){ first_name = ""; last_name = ""; } 1)τι ειναι default. και τι custom constructor? 2)απ οτι καταλαβα αν καταλαβα καλα πρεπει παντα να αρχικοποιουμε εναν constructor,εδω στο παραπανω τα "" που βαζεις τι ειναι ακριβως? 3)αν δηλωσω ας πουμε 3 ακεραιους που θα εδινε τιμες ο χρηστης απ το πληκτρολογιο θα επρεπε να τους αρχικοποιησω κι αυτους μεσα στον κατασκευαστη? int a = 0; int b = 0; int c = 0; κατι τετοιο δηλαδη?πρεπει δηλαδη παντα να αρχικοπειω τις μεταβλητες μου μεσα στον κατασκευαστη εστω και με μηδενικη τιμη? public String MyFullName(){ return this.getFirstName() + " " + this.getLastName(); } εδω σ εχασα,αν καταλαβα σωστα ενωνεις το μικρο ονομα με το επιθετο ε? MyName.setFirstName(in.nextLine()); αυτο ειναι το ιδιο με το να κανω αυτο? MyName = in.nextLine(setFirstName) η ειναι λαθος αυτο? Τελος παντων ειναι ενα ωραιο παραδειγμα αυτο το προγραμμα που μου εγραψες και με βοηθησε αρκετα,αν και εχω μερικες αποριες ακομα αλλα θα το μελετησω πιο διεξοδικα για να καταλαβω την λογικη σου
gon1332 Δημοσ. 3 Μαρτίου 2014 Δημοσ. 3 Μαρτίου 2014 Σκέψου ένα αντικείμενο της καθημερινότητας. Ένα αυτοκίνητο: public class Car { } Ένα αυτοκίνητο έχει κάποια χαρακτηριστικά (fields στη Java). Μερικά από αυτά είναι: το χρώμα του η μάρκα του τα κυβικά του η μέγιστη ταχύτητά του public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h } Όταν αγοράζουμε ένα αυτοκίνητο αυτά τα χαρακτηριστικά έχουν κάποιες τιμές. Αν εσύ πεις σε κάποια εταιρία ότι θέλεις ένα αυτοκίνητο χωρίς να ορίσεις τί χαρακτηριστικά να έχει τότε θα σου δώσουν ένα αυτοκίνητο που δίνουν σε αυτούς που δεν ορίζουν χαρακτηριστικά. Θα σου δώσουν ένα αυτοκίνητο με default χαρακτηριστικά. Ένα αυτοκίνητο χωρίς μάρκα, χρώμα, τελική κλπ. (---> default constructor). Πρέπει εσύ χειροκίνητα να το αρχικοποιήσεις. Αν εσύ ορίσεις τί αυτοκίνητο θέλεις, η εταιρία θα σου φτιάξει ένα αυτοκίνητο με τα χαρακτηριστικά που ζήτησες τότε αυτή θα στο δώσει κατασκευασμένο όπως το ζήτησες (---> custom constructor). Σκέψου δηλαδή την εταιρία σαν τον κατασκευαστή. public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h public Car () {} public Car (String carColor, String carBrand, double carCc, double carTopSpeed) { color = carColor; brand = carBrand; cc = carCc; topSpeed = carTopSpeed; } } Ένα αυτοκίνητο έχει κάποιες ιδιότητες, όπως: κινείται (με τι ταχύτητα σταματάει public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h public double currentSpeed; // in km/h public Car () {} public Car (String carColor, String carBrand, double carCc, double carTopSpeed) { color = carColor; brand = carBrand; cc = carCc; topSpeed = carTopSpeed; } public void startMoving (double speed) { currentSpeed = speed; } public void stopMoving (void) { currentSpeed = 0; } } Έστω ότι θέλω να δημιουργήσω ένα πράσινο Nissan των 1000cc με τελική 280km/h: public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h public double currentSpeed; // in km/h public Car () {} public Car (String carColor, String carBrand, double carCc, double carTopSpeed) { color = carColor; brand = carBrand; cc = carCc; topSpeed = carTopSpeed; } public void startMoving (double speed) { currentSpeed = speed; } public void stopMoving (void) { currentSpeed = 0; } public static void Main (String[] args) { Car myDreamCar; myDreamCar = new Car("green", "Nissan", 1000, 280); } } Πλέον το αυτοκίνητο των ονείρων μου μοντελοποιήθηκε στο αντικείμενο myDreamCar. Από την ευρύτερη κλάση Car, μπορώ να φτιάξω/κατασκευάσω πολλά αντικείμενα: myDadsCar κλπ. Έστω ότι θέλω να δείξω σε όλους τα χαρακτηριστικά του αυτοκινήτου μου. Αυτό θα το κάνω με μία println(). Πως όμως θα τα προσπελάσω; Με τους get accessors. Όπως υποδηλώνει και το όνομά τους, παίρνουν μία τιμή από το αντικείμενο και την επιστρέφουν σε μας: public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h public double currentSpeed; // in km/h public Car () {} public Car (String carColor, String carBrand, double carCc, double carTopSpeed) { color = carColor; brand = carBrand; cc = carCc; topSpeed = carTopSpeed; } public String getBrand () { // paromoia kai gia ta upoloipa fields return brand; } public void startMoving (double speed) { currentSpeed = speed; } public void stopMoving (void) { currentSpeed = 0; } public static void Main (String[] args) { Car myDreamCar; myDreamCar = new Car("green", "Nissan", 1000, 280); System.out.println("I bought a brand new " + myDreamCar.getColor() + " " + myDreamCar.getBrand()); } } Έστω τώρα ότι θέλεις να βάψεις το αυτοκίνητο κίτρινο. Εδώ χρειάζεσαι μία μέθοδο που να μπορεί να αλλάξει ένα χαρακτηριστικό του αντικειμένου. Τέτοιες μέθοδοι είναι είνα οι set accessors: public class Car { public String color; public String brand; public double cc; public double topSpeed; // in km/h public double currentSpeed; // in km/h public Car () {} public Car (String carColor, String carBrand, double carCc, double carTopSpeed) { color = carColor; brand = carBrand; cc = carCc; topSpeed = carTopSpeed; } public String getBrand () { // paromoia kai gia ta upoloipa fields return brand; } public void setColor (String newColor) { // paromoia kai gia ta upoloipa fields color = newColor; } public void startMoving (double speed) { currentSpeed = speed; } public void stopMoving (void) { currentSpeed = 0; } public static void Main (String[] args) { Car myDreamCar; myDreamCar = new Car("green", "Nissan", 1000, 280); String oldColor, newColor; System.out.println("I bought a brand new " + myDreamCar.getColor() + " " + myDreamCar.getBrand()); oldColor = myDreamCar.getColor(); myDreamCar.setColor("yellow"); newColor = myDreamCar.getColor(); System.out.println("My car was " + oldColor + ". I painted it " + newColor + "."); } } Όπως βλέπεις μπορείς να μεταφέρεις έυκολα αντικείμενα της καθημερινής σου ζωής στα προγράμματά σου. Ο προγραμματισμός βγαίνει πιο φυσικά με τέτοιες γλώσσες. Προσπάθησε να σκεφτείς πως θα ήταν μία κλάση η οποία περιγράφει έναν άνθρωπο, ένα ποδήλατο, ένα ρολόι, ένα blog ( ). Είναι δύσκολο να τα κατανοήσεις μέσα από tutorials. Ένα καλό βιβλίο που χρησιμοποιήσαμε στο Πολυτεχνείο είναι αυτό: http://www.amazon.com/Absolute-Java-Student-Value-Edition/dp/0132834235
bazinga13 Δημοσ. 4 Μαρτίου 2014 Μέλος Δημοσ. 4 Μαρτίου 2014 απλα ενα μεγαλο μπραβο φιλε μου,εχω διαβασει τις τελευταιες δεκα μερες απειρες σελιδες στο ιντερνετ και αρθρο ομοιο με το δικο σου δεν βρηκα πουθενα,μ εντυπωσιασες,το σκελος με τι ειναι κλασση,αντικειμενο κτλ το καταλαβα τωρα τι κανει ακριβως,εχω μερικες αποριες ομως στον κωδικα,αυτα και δεν θα σε κουρασω αλλο public MyClass() {} εδω βλεπω οτι δηλωνεις εναν αδειο κατασκευαστη,γιατι το κανεις αυτο? myDreamCar = new MyClass("green", "Nissan", 1000, 280); εδω που πανε αυτες οι τιμες που εκχωρεις? System.out.println("I bought a brand new " + myDreamCar.getColor() + " " + myDreamCar.getBrand()); oldColor = myDreamCar.getColor(); myDreamCar.setColor("yellow"); newColor = myDreamCar.getColor(); System.out.println("My car was " + oldColor + ". I painted it " + newColor + "."); } 1)εδω χρησιμοποιεις την μεθοδο getColor() την οποια δεν μπορεσα να βρω μεσα στην κλασση,μηπως ενοεις την setColor?γιατι το τρεχω το προγραμμα και μου βγαζει λαθος εκει
gon1332 Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Άδειος constructor με 0 ορίσματα: Τον δήλωσα έτσι για να μου κάνεις ερώτηση! Όταν δημιουργείς ένα Object (αντικείμενο), το myDreamCar καλή ώρα, καλείς τον constructor. Για να δούμε μία μία τις εντολές δημιουργίας αντικειμένου. Στην περίπτωσή μας θέλουμε να δημιουργήσουμε ένα αντικείμενο τύπου Car, ένα αυτοκίνητο. Αρχικά κάνουμε μία δήλωση: Car myDreamCar; Με αυτή τη γραμμή κάναμε τη δήλωση ότι το myDreamCar είναι τύπου Car. Πρέπει να δεσμεύσουμε μνήμη (που λέμε και στη C), να το κατασκευάσουμε τέλος πάντων. Στη Java κατασκευάζουμε αντικείμενα με την λέξη κλειδί new ακολουθούμενο από τον constructor της αντίστοιχης κλάσης: myDreamCar = new Car("green", "Nissan", 1000, 280); Πρόσεξε πως το Car μετά το new είναι η κλήση του constructor που δηλώσαμε πιο πάνω. Με αυτή την γραμμή, οι παράμετροι αντιστοιχίζονται στα ορίσματα του αντίστοιχου constructor: "green" -> carColor "Nissan" -> carBrand 1000 -> carCc 280 -> carTopSpeed Στη συνέχεια εκτελείται ο κώδικας μέσα στον constructor, που αν δεις είναι οι αρχικοποιήσεις των fields. Έτσι λοιπόν δημιουργήθηκε το αυτοκίνητο. Τι κάνει ο constructor: public MyClass() {} Της Java δεν της αρέσει να έχει μη αρχικοποιημένα αντικείμενα. Γι' αυτό είτε το θέλεις είτε όχι χρησιμοποιεί τους default constructors. Οι default constructors έχουν την παραπάνω μορφή. Στην ουσία η Java αρχικοποιεί τα πάντα με 0 ή null.Αν δε δηλώσεις γενικά κανένα constructor για την κλάση σου η Java εκ των έσω θα χρησιμοποιεί κάτι τέτοιο. Απλά έχε το στο μυαλό σου. Θα μπορούσα να δημιουργήσω ένα αυτοκίνητο κάπως έτσι: myDreamCar = new Car(); Βλέπεις που το Car() δεν έχει ορίσματα; Η Java θα το ταιριάξει με τον default constructor και θα αρχικοποιήσει όλα τα fields με 0 ή null Όσον αφορά την getColor(), την άφησα να τη δηλώσεις εσύ (είδες το σχόλιο // paromoia kai gia ta upoloipa fields??). Είναι σαν την getBrand(). Για κάθε field θα βάλεις και από ένα get accessor, όπως και από ένα set accessor. Πειραματήσου! 1
ZAKKWYLDE Δημοσ. 4 Μαρτίου 2014 Δημοσ. 4 Μαρτίου 2014 Συμφωνώ και εγώ ότι πρέπει να πάρεις βιβλίο και να διαβάσεις πολύ προσεκτικά τα πρώτα κεφάλαια και να κάνεις όλες τις ασκήσεις μία μία. Σου λέω απο τώρα ότι θα χρειαστείς τουλάχιστον 1 χρόνο εξάσκηση για μπορείς να πείς ότι κατέχεις σε εισαγωγικό βαθμό τη γλώσσα. Πολύ σημαντικό είναι να εστιάσεις και στα code conventions (πως ονομάζουμε/γράφουμε τις μεθόδους/κλάσεις μας).
bazinga13 Δημοσ. 4 Μαρτίου 2014 Μέλος Δημοσ. 4 Μαρτίου 2014 Συμφωνώ και εγώ ότι πρέπει να πάρεις βιβλίο και να διαβάσεις πολύ προσεκτικά τα πρώτα κεφάλαια και να κάνεις όλες τις ασκήσεις μία μία. Σου λέω απο τώρα ότι θα χρειαστείς τουλάχιστον 1 χρόνο εξάσκηση για μπορείς να πείς ότι κατέχεις σε εισαγωγικό βαθμό τη γλώσσα. Πολύ σημαντικό είναι να εστιάσεις και στα code conventions (πως ονομάζουμε/γράφουμε τις μεθόδους/κλάσεις μας). Συμφωνω φιλε ZAKKWYLDE,θα το κανω,δυστυχως τα καλα βιβλια ειναι στα Αγγλικα και ειναι λιγο μπελας να διαβαζεις τοσο εξειδικευμενα βιβλια στα Αγγλικα αλλα ενταξει το νοημα το βγαζω,βρηκα αυτο εδω στα ελληνικα http://javakias.blogspot.gr/2007/07/java-tutorials.html καθως και καποιες σημειωσεις καποιου Γιωργου Λιακεα αλλα μου εστειλε και ενα χθες ο φιλος gon1332,ενταξει οσο καιρο παρει δεν με πειραζει αρκει να γεμιζω τις ωρες μου ετσι δημιουργικα και να χω και κατι ν ασχολουμαι γιατι λογο ανεργιας χρονος υπαρχει μπολικος Την καλημερα μου σε ολους σας φιλοι μου και σας ευχαριστω και παλι για τον χρονο σας
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα