Download - Java Lecture4 OVR

Transcript
Page 1: Java Lecture4 OVR

1

Προγραµµατισµός ΙΙJava 2

∆ηµιουργική Εργασίαµε Κλάσεις κι Αντικείµενα

∆ρ. ∆. Ιακωβίδης

Τι Θα Μελετήσουµε∆οµή µιας κλάσης και των µεθόδων τηςΕπιθεώρηση των κλάσεων και των µεθόδων τουςΜέθοδοι και thisΥπερφόρτωση µεθόδωνΜέθοδοι δηµιουργοίΥπερφόρτωση δηµιουργώνΥπέρβαση µεθόδωνΜέθοδοι και superΜέθοδοι τερµατισµού (όχι ολοκλήρωσης)Τελικές κλάσεις και µέθοδοι

Page 2: Java Lecture4 OVR

2

∆ρ. ∆. Ιακωβίδης

∆οµή µιας ΚλάσηςΟρισµόςclass Classname {

static classVariableµεταβλητές objectVariableµέθοδοι µε ορίσµατα

}

Αναφορά στις µεταβλητές κλάσης µεClassname.classVariableΑναφορά στις µεταβλητές αντικειµένου µε Objectname.objectVariable

∆ρ. ∆. Ιακωβίδης

ΜέθοδοιΟρισµόςreturnType methodName(type1 arg1, type2

arg2, …){σώµα της µεθόδουreturn returnTypeVariable;

}

Αν returnType = void δε χρειάζεται returnΑναφορά σε αυτές µεClassname.methodname

Page 3: Java Lecture4 OVR

3

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµαint[] makeRange(int lower, int upper){σώµα της µεθόδουreturn πίνακα ακεραίων

}

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµα

class RangeClass {int[] makeRange(int lower, int upper) {

int arr[] = new int[ (upper - lower) + 1 ];

for (int i = 0; i < arr.length; i++) {arr[i] = lower++;

}return arr;

}

συνεχίζεται ...

Page 4: Java Lecture4 OVR

4

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµαpublic static void main(String arguments[]) {

int theArray[];RangeClass theRange = new RangeClass();

theArray = theRange.makeRange(1, 10);System.out.print("The array: [ ");for (int i = 0; i < theArray.length; i++) {

System.out.print(theArray[i] + " ");}System.out.println("]");

}}

Τι επιστρέφει ?

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Το πέρασµα των παραµέτρων στις µεθόδους γίνεται

µε τιµή (by value) για τις µεταβλητές πρωταρχικού τύπουδηλ. περνάει η τιµή της µεταβλητής

µε αναφορά (by reference) για τα αντικείµεναδηλ. περνάει η διεύθυνση ουσιαστικά της µεταβλητής (σαν να λέµε δείκτης στο αντικείµενο)

Προσοχή! Οι πίνακες είναι και αυτοί αντικείµενα

Page 5: Java Lecture4 OVR

5

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµαclass PassByReference {

int onetoZero(int arg[]) {int count = 0;for (int i = 0; i < arg.length; i++) {

if (arg[i] == 1) {count++;arg[i] = 0;

}}return count;

}συνεχίζεται ...

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµαpublic static void main(String arguments[]) {

int arr[] = { 1, 3, 4, 5, 1, 1, 7 };PassByReference test = new PassByReference();int numOnes;

System.out.print("Values of the array: [ ");for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + " ");}System.out.println("]");

συνεχίζεται ...

Page 6: Java Lecture4 OVR

6

∆ρ. ∆. Ιακωβίδης

Μέθοδοι

Παράδειγµα

numOnes = test.onetoZero(arr);System.out.println("Number of Ones = " + numOnes);System.out.print("New values of the array: [ ");for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i] + " ");}System.out.println("]");

}

Τι επιστρέφει ?

∆ρ. ∆. Ιακωβίδης

Επιθεώρηση Κλάσεων

Μπορούµε να «διαβάσουµε» προγραµµατιστικές πληροφορίες µέσα από το ίδιο µας το πρόγραµµα !

Μπορούµε να διαβάσουµε σε ποια κλάση ανήκει ένα αντικείµενο και τις public µεταβλητές και µεθόδους του

Αυτό γίνεται µε το πακέτο java.lang.reflect (βλ. Java 2 SDK)

Page 7: Java Lecture4 OVR

7

∆ρ. ∆. Ιακωβίδης

Επιθεώρηση ΚλάσεωνΠαράδειγµα

import java.lang.reflect.*;import java.util.Random;

class SeeMethods {public static void main(String[] arguments) {

Random rd = new Random();Class className = rd.getClass();Method[] methods = className.getMethods();for (int i = 0; i < methods.length; i++) {

System.out.println("Method: " + methods[i]);}

}}

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και this

Σε µια µέθοδο αν θέλουµε να αναφερθούµε στο αντικείµενο που την κάλεσε (τρέχον αντικείµενο) αντί του ονόµατος του αντικειµένου µπορούµε να γράψουµε τη λέξη κλειδί this

Το this το χρησιµοποιούµε µέσα στις µεθόδους για να αναφερθούµε σε ένα οποιοδήποτε αντικείµενο µπορεί να παραχθεί από την κλάση στην οποία βρισκόµαστε

Σηµαίνει απλά: this object here !

Page 8: Java Lecture4 OVR

8

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και this

Παράδειγµαclass Car {

String licensePlate = ""; // e.g. "New York 543 A23"double speed = 0.0; // in kilometers per hourdouble maxSpeed; = 120.0; // in kilometers per hour

// accelerate to maximum speed// put the pedal to the metalvoid floorIt() {

this.speed = this.maxSpeed; }συνεχίζεται ...

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και this

Παράδειγµα

void accelerate(double deltaV) {

this.speed = this.speed + deltaV;if (this.speed > this.maxSpeed) {

this.speed = this.maxSpeed; }if (this.speed < 0.0) {

this.speed = 0.0; }

}}συνεχίζεται ...

Page 9: Java Lecture4 OVR

9

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και this

Παράδειγµαclass CarTest4 {

public static void main(String[] args) {

Car c = new Car();

c.licensePlate = "New York A45 636";c.maxSpeed = 123.45;

System.out.println(c.licensePlate + " is moving at " + c.speed + " kilometers per hour.");

συνεχίζεται ...

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και this

Παράδειγµα

for (int i = 0; i < 15; i++) {c.accelerate(10.0); System.out.println(c.licensePlate + " is moving at "

+ c.speed + " kilometers per hour.");

}}

}

Επιστρέφει ...

Page 10: Java Lecture4 OVR

10

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και thisΠαράδειγµα

New York A45 636 is moving at 0.0 kilometers per hour.New York A45 636 is moving at 10.0 kilometers per hour.New York A45 636 is moving at 20.0 kilometers per hour.New York A45 636 is moving at 30.0 kilometers per hour.New York A45 636 is moving at 40.0 kilometers per hour.New York A45 636 is moving at 50.0 kilometers per hour.New York A45 636 is moving at 60.0 kilometers per hour.New York A45 636 is moving at 70.0 kilometers per hour.New York A45 636 is moving at 80.0 kilometers per hour.New York A45 636 is moving at 90.0 kilometers per hour.New York A45 636 is moving at 100.0 kilometers per hour.New York A45 636 is moving at 110.0 kilometers per hour.New York A45 636 is moving at 120.0 kilometers per hour.New York A45 636 is moving at 123.45 kilometers per hour.New York A45 636 is moving at 123.45 kilometers per hour.New York A45 636 is moving at 123.45 kilometers per hour.

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση Μεθόδων

∆ύο µέθοδοι µε το ίδιο όνοµα αλλά διαφορετικά ορίσµατα είναι διαφορετικές µέθοδοι

∆εν πρέπει αναγκαστικά να επιστρέφουν τον ίδιο τύπο, πρέπει να έχουν διαφορετικά ορίσµατα

Η τεχνική αυτή, λέγεται υπερφόρτωση µεθόδων

Συνήθως επιλέγουµε οι µέθοδοι αυτές να κάνουν την ίδια δουλειά αλλά µε διαφορετικό τρόπο

Page 11: Java Lecture4 OVR

11

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ΜεθόδωνΠαράδειγµαΗ µέθοδος valueOf της κλάσης String

public static String valueOf(boolean b)public static String valueOf(char c)public static String valueOf(char[] data)public static String valueOf(char[] data, int offset, int count)public static String valueOf(double d)public static String valueOf(float f)public static String valueOf(int i)public static String valueOf(Object obj)public static String valueOf(long l)

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ΜεθόδωνΠαράδειγµα

import java.awt.Point;

class MyRect {int x1 = 0;int y1 = 0;int x2 = 0;int y2 = 0;

MyRect buildRect(int x1, int y1, int x2, int y2) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;return this;

}

Page 12: Java Lecture4 OVR

12

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση Μεθόδων

ΠαράδειγµαMyRect buildRect(Point topLeft, Point bottomRight) {

x1 = topLeft.x;y1 = topLeft.y;x2 = bottomRight.x;y2 = bottomRight.y;return this;

}

MyRect buildRect(Point topLeft, int w, int h) {x1 = topLeft.x;y1 = topLeft.y;x2 = (x1 + w);y2 = (y1 + h);return this;

}

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση Μεθόδων

Παράδειγµαvoid printRect(){

System.out.print("MyRect: <" + x1 + ", " + y1);System.out.println(", " + x2 + ", " + y2 + ">");

}

public static void main(String arguments[]) {MyRect rect = new MyRect();

System.out.println("Calling buildRect with coordinates 25,25, 50,50:");

rect.buildRect(25, 25, 50, 50);rect.printRect();System.out.println("***");

Page 13: Java Lecture4 OVR

13

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ΜεθόδωνΠαράδειγµα

System.out.println("Calling buildRect with points (10,10), (20,20):");

rect.buildRect(new Point(10,10), new Point(20,20));rect.printRect();System.out.println("***");

System.out.print("Calling buildRect with 1 point (10,10),");

System.out.println(" width (50) and height (50):");

rect.buildRect(new Point(10,10), 50, 50);rect.printRect();System.out.println("***");

}}

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ΜεθόδωνΤι θα συµβεί αν προσθέσω µια ακόµη buildRect που επιστρέφει άλλο τύπο ?

π.χ. αντί MyRect επιστρέφει float

float buildRect(Point topLeft, int w, int h)return 12.6F;

Επιστρέφει σφάλµα γιατί τα ορίσµατα είναι ίδια !

Όµως αν βάλουµε ένα όρισµα παραπάνω,

float buildRect(Point topLeft, int w, int h, float jjj)return 12.6F;

Μεταγλωττίζεται σωστά !

Page 14: Java Lecture4 OVR

14

∆ρ. ∆. Ιακωβίδης

Μέθοδοι ∆ηµιουργοίΜια µέθοδος που έχει το όνοµα της κλάσης στην οποία ανήκει λέγεται δηµιουργός (constructor)Καλείται κατά τη δηµιουργία ενός αντικειµένου µε newΧρησιµοποιούνται για την αρχικοποίηση των µεταβλητών του αντικειµένουΜπορεί µια µέθοδος δηµιουργός να καλέσει άλλη µέθοδο δηµιουργό, µε thisΜπορεί να γίνει και υπερφόρτωση µεθόδων δηµιουργών

∆ρ. ∆. Ιακωβίδης

Μέθοδοι ∆ηµιουργοί

Παράδειγµαclass Person {

String name;int age;

Person(String n, int a) {name = n;age = a;

}

void printPerson() {System.out.print("Hi, my name is " + name);System.out.println(". I am " + age + " years old.");

} συνεχίζεται ...

Page 15: Java Lecture4 OVR

15

∆ρ. ∆. Ιακωβίδης

Μέθοδοι ∆ηµιουργοί

Παράδειγµα

public static void main (String arguments[]) {Person p;p = new Person("Luke", 50);p.printPerson();System.out.println("----");p = new Person("Laura", 35);p.printPerson();System.out.println("----");

}}

∆ρ. ∆. Ιακωβίδης

Μέθοδοι ∆ηµιουργοίΠαράδειγµα κλήσης µεθόδου δηµιουργού από άλλη µέθοδο δηµιουργό

class MyCircle {int x, y, radius;MyCircle(int xPoint, int yPoint, radiusLength) {

this.x = xPoint;this.y = yPoint;this.radius = radiusLength;

}MyCircle(int xPoint, int yPoint) {

this(xPoint, yPoint, 1);}

}

Page 16: Java Lecture4 OVR

16

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ∆ηµιουργών

Παράδειγµαimport java.awt.Point;

class MyRect2 {int x1 = 0;int y1 = 0;int x2 = 0;int y2 = 0;

MyRect2(int x1, int y1, int x2, int y2) {this.x1 = x1;this.y1 = y1;this.x2 = x2;this.y2 = y2;

} συνεχίζεται ...

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ∆ηµιουργών

ΠαράδειγµαMyRect2(Point topLeft, Point bottomRight) {

x1 = topLeft.x;y1 = topLeft.y;x2 = bottomRight.x;y2 = bottomRight.y;

}

MyRect2(Point topLeft, int w, int h) {x1 = topLeft.x;y1 = topLeft.y;x2 = (x1 + w);y2 = (y1 + h);

}συνεχίζεται ...

Page 17: Java Lecture4 OVR

17

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ∆ηµιουργών

Παράδειγµαvoid printRect() {

System.out.print("MyRect: <" + x1 + ", " + y1);System.out.println(", " + x2 + ", " + y2 + ">");

}

public static void main(String arguments[]) {MyRect2 rect;

System.out.println("Calling MyRect2 with coordinates 25,25 50,50:");

rect = new MyRect2(25, 25, 50,50);rect.printRect();System.out.println("***");

συνεχίζεται ...

∆ρ. ∆. Ιακωβίδης

Υπερφόρτωση ∆ηµιουργών

Παράδειγµα

System.out.print("Calling MyRect2 with 1 point (10,10)");

System.out.println(" width (50) and height (50):");rect = new MyRect2(new Point(10,10), 50, 50);rect.printRect();System.out.println("***");

}}

Τι επιστρέφει ?

Page 18: Java Lecture4 OVR

18

∆ρ. ∆. Ιακωβίδης

Υποκλάσεις

Τις δηµιουργούµε όταν θέλουµε να επεκτείνουµε τα χαρακτηριστικά και τις λειτουργίες µιας κλάσης

Γίνεται χρησιµοποιώντας τη λέξη κλειδί extends στον ορισµό της νέας υποκλάσης

Το ίδιο µπορεί να γίνει και µε µεθόδους δηµιουργούς

∆ρ. ∆. Ιακωβίδης

Υποκλάσεις

Παράδειγµα

class PrintClass {int x = 0;int y = 1;

void printMe() {System.out.println("x is " + x + ", y is " + y);System.out.println("I am an instance of the class " +this.getClass().getName());

}}

∆εν έχει µέθοδο main() άρα δεν τρέχει !

Page 19: Java Lecture4 OVR

19

∆ρ. ∆. Ιακωβίδης

ΥποκλάσειςΠαράδειγµα

class PrintSubClass extends PrintClass {int z = 3;

public static void main(String arguments[]) {PrintSubClass obj = new PrintSubClass();obj.printMe();

}}

Επεκτείνει την προηγούµενη κλάση µε µια µέθοδο main() άρα τρέχει !Η PrintSubClass είναι υποκλάση της PrintClassΠροσοχή, άλλο αρχείο η πρώτη κλάση άλλο η δεύτερη.

∆ρ. ∆. Ιακωβίδης

Υπέρβαση ΜεθόδωνΠαράδειγµα προτεραιότητας

class PrintSubClass2 extends PrintClass {int z = 3;void printMe() {

System.out.println("x is " + x + ", y is " + y +", z is " + z);

System.out.println("I am an instance of the class " + this.getClass().getName());}public static void main(String arguments[]) {

PrintSubClass2 obj = new PrintSubClass2();obj.printMe();

} }

Η printMe() εδώ είναι πιο κοντά – εντός της νέας υποκλάσης –κι έτσι έχει µεγαλύτερη προτεραιότητα από εκείνη την printMeπου βρίσκεται στην κλάση PrintSubClass. Λέµε λοιπόν πως η µέθοδος printMe στην υποκλάση αυτή, υπερβαίνει την µέθοδο printMe της υπερκλάσης της

Page 20: Java Lecture4 OVR

20

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και super

Η λέξη κλειδί this χρησιµοποιείται για να αναφερόµαστε στην τρέχουσα κλάση αντί να χρησιµοποιούµε το όνοµά της

Οµοίως, η λέξη κλειδί super χρησιµοποιείται για να αναφερόµαστε στην υπερκλάση (superclass!) της τρέχουσας κλάσης

∆ρ. ∆. Ιακωβίδης

Μέθοδοι και superΠαράδειγµα

import java.awt.Point;class NamedPoint extends Point {

String name;

NamedPoint(int x, int y, String name) {super(x,y);this.name = name;

}public static void main (String[] arguments) {

NamedPoint np = new NamedPoint(5, 5, "SmallPoint");

System.out.println("x is " + np.x);System.out.println("y is " + np.y);System.out.println("Name is " + np.name);

}}

Page 21: Java Lecture4 OVR

21

∆ρ. ∆. Ιακωβίδης

Μέθοδοι Τερµατισµού

Όπως έχουµε µεθόδους δηµιουργούς ενός αντικειµένου για να το δηµιουργήσουµε

Έτσι έχουµε και µεθόδους τερµατισµού του αντικειµένου για να το τερµατίσουµε

Συνήθως δε χρειάζεται γιατί η µνήµη που δεσµεύουν τα αντικείµενα απελευθερώνεται αυτόµατα µε την παύση της χρήσης του

Χρησιµεύει σπάνια όταν κάνουµε διαχείριση σφαλµάτων (error handling)

∆ρ. ∆. Ιακωβίδης

Μέθοδοι Τερµατισµού

Αυτό γίνεται µε υπέρβαση της µέθοδου finalize()

H finalize() ορίζεται στην κλάση java.lang.object ως εξής

protected void finalize() throws Throwable

Καλείται αυτόµατα όταν πάψει να χρησιµοποιείται ένα αντικείµενο αλλά η Java δε µας το εγγυάται αυτό

Page 22: Java Lecture4 OVR

22

∆ρ. ∆. Ιακωβίδης

Επίπεδα Ελέγχου ΠροσπέλασηςΥπάρχουν λέξεις κλειδιά που ελέγχουν ποιος βλέπει ποια κλάση, µέθοδο, µεταβλητή

Αυτές είναι µε σειρά προσπελασιµότητας οιprivate (ιδιωτική προσπέλαση)protected (προστατευµένη προσπέλαση)χωρίς λέξη κλειδί είναι η προεπιλεγµένη προσπέλασηpublic (δηµόσια προσπέλαση)

Παράδειγµαpublic int MyMethod(int x, int y)

∆ρ. ∆. Ιακωβίδης

Επίπεδα Ελέγχου Προσπέλασης

Page 23: Java Lecture4 OVR

23

∆ρ. ∆. Ιακωβίδης

Επίπεδα Ελέγχου Προσπέλασης

Όταν δηµιουργούµε µια δευτερεύουσα κλάση στην οποία υπερβαίνουµε µια µέθοδο της υπερκλάσης πρέπει να λαβουµε υπόψη τα εξής:

∆εν επιτρέπεται να αντικατασταθεί µια µέθοδος µε νέα περισσότερο ελεγχόµενη από την αρχική

Μέθοδοι που δηλώνονται private δεν κληρονοµούνται καθόλου

∆ρ. ∆. Ιακωβίδης

Επίπεδα Ελέγχου Προσπέλασης

Παράδειγµαpublic class CountInstances {

private static int numInstances = 0;

protected static int getNumInstances() {return numInstances;

}

private static void addInstance() {numInstances++;

}

CountInstances() {CountInstances.addInstance();

} συνεχίζεται ...

Page 24: Java Lecture4 OVR

24

∆ρ. ∆. Ιακωβίδης

Επίπεδα Ελέγχου Προσπέλασης

Παράδειγµα

public static void main(String arguments[]) {System.out.println("Starting with " +

CountInstances.getNumInstances() + " instances");

for (int i = 0; i < 10; ++i)new CountInstances();

System.out.println("Created " +CountInstances.getNumInstances() + "

instances");}

}

∆ρ. ∆. Ιακωβίδης

Τελικές Κλάσεις και ΜέθοδοιΌπως έχουµε τελικές µεταβλητές (σταθερές) έτσι έχουµε και µεθόδους αλλά και κλάσειςΟρίζονται κι αυτές µε τη λέξη κλειδί final

Οι τελικές µέθοδοι δεν αντικαθίστανται από άλλες σε δευτερεύουσες κλάσειςπ.χ. final int myMethod(int x, int y)

Οι τελικές κλάσεις δεν επιτρέπεται να έχουν υποκλάσειςπ.χ. final public class MyClass { }

Page 25: Java Lecture4 OVR

25

∆ρ. ∆. Ιακωβίδης

ΣυµπεράσµαταΒασικά συστατικά των προγραµµάτων Java είναι οι κλάσειςΜια κλάση χρησιµοποιείται σαν καλούπι για τη δηµιουργία αντικειµένων αυτήςΜια κλάση (MyClass) / ένα αντικείµενο (myObject) έχει µεταβλητές και µεθόδουςΟι µεταβλητές κλάσης ορίζονται στην αρχή της κλάσης µε static και ισχύουν για όλα τα αντικείµενα τηςΤις καλούµε και µε το όνοµα της κλάσηςπ.χ. myObject.myvar, MyClass.myvar

∆ρ. ∆. Ιακωβίδης

ΣυµπεράσµαταΟι µέθοδοι κλάσης ορίζονται και αυτές µε static και καλούνται και µε το όνοµα της κλασηςπ.χ. myObject.myMethod(), MyClass.myMethod()π.χ. String.valueOf()

Οι µέθοδοι µιας κλάσης υπερφορτώνονται κι επιτρέπεται να έχουµε πολλές µεθόδους µε διαφορετικά ορίσµατα ανεξαρτήτως τον τύπο που επιστρέφουνΓια να αρχικοποιούµε τις µεταβλητές των νέων αντικειµένων µας φτιάχνουµε µεθόδους δηµιουργούς που έχουν ίδιο όνοµα µε την κλάση τους

Page 26: Java Lecture4 OVR

26

∆ρ. ∆. Ιακωβίδης

ΣυµπεράσµαταΟι µέθοδοι δηµιουργοί υπερφορτώνονται επίσηςΤο αντίθετο των µεθόδων δηµιουργών είναι οι µέθοδοι τερµατισµού που κατασκευάζονται µε επέκταση (υπέρβαση) της µεθόδου finalize()Η Java µας προσφέρει τη δυνατότητα προγραµµατιστικά να ελέγχουµε τα περιεχόµενα µιας κλάσης µέσω του java.lang.reflectΑν τα ονόµατα των κλάσεων είναι µεγάλα ή δε θέλουµε να τα θυµόµαστε µπορούµε να χρησιµοποιούµε λέξεις κλειδιά αντί αυτώνΜε this αναφερόµαστε στην τρέχουσα κλάσηΜε super αναφερόµαστε στην τρέχουσα υπερκλάση

∆ρ. ∆. Ιακωβίδης

Συµπεράσµατα

Η χρήση µιας κλάσης, µεθόδου ή µεταβλητής µπορεί να επιτρέπεται ή να απαγορεύεται σε άλλες κλάσεις χρησιµοποιώντας τις λέξεις private, protected και public

Όπως υπάρχουν τελικές µεταβλητές (σταθερές), υπάρχουν και τελικές µέθοδοι ή κλάσεις που σηµειώνονται µε finalΟι τελικές µέθοδοι δεν αντικαθίστανταιΟι τελικές κλάσεις δεν έχουν υποκλάσεις

Page 27: Java Lecture4 OVR

27

∆ρ. ∆. Ιακωβίδης

Συµπεράσµατα

Μας δίδεται λοιπόν η δυνατότητα να χρησιµοποιούµε πολλές κλάσεις σε µια εφαρµογή µαςΣε µια εφαρµογή µε πολλές κλάσεις είναι καλύτερα να έχουµε κάθε κλάση σε διαφορετικό αρχείοΘα πρέπει να πούµε στον compiler που να ψάξει για τις κλάσεις αυτέςΑυτό γίνεται είτε ορίζοντας τη µεταβλητή περιβάλλοντος του λειτουργικού CLASSPATH είτε µέσω των ορισµάτων του compiler