[ Pobierz całość w formacie PDF ]
.Uwaga: Gdyby w rozpatrywanym programie u¿yto polecenia importuimport janb.pkg.Chain;albo ogólniejszego poleceniaimport janb.pkg.*.;to przytoczon¹ instrukcjê mo¿na by uproœciæ doChain chain = new Chain();Przyk³ad Hermetyzacja klaspackage janb.pkg;publicclass Master {//.}class Slave {//.}Klasy Master i Slave nale¿¹ do pakietu janb.pkg.Klasa Master jest dostêpnawszêdzie, natomiast klasa Slave jest dostêpna tylko w obrêbie klas nale¿¹cychdo pakietu janb.pkg.Hermetyzacja sk³adnikówHermetyzacja sk³adników jest okreœlona przez specyfikatory: private (prywatny),public (publiczny) i protected (chroniony).Sk³adnik prywatny jest dostêpny tylko w jego klasie macierzystej.Sk³adnikpubliczny jest dostêpny wszêdzie.Sk³adnik chroniony jest dostêpny w ca³ym pakiecie jego klasy macierzystej orazw podklasie jego klasy macierzystej (niezale¿nie od tego, w jakim umieszczonoj¹ pakiecie).Sk³adnik pakietowy (zadeklarowany bez specyfikatora dostêpnoœci) jest dostêpnyw ca³ym pakiecie, do którego nale¿y jego klasa.Przyk³ad Hermetyzacja sk³adnikówpackage janb.pkg;class Person {private String name;private int age;public Person(String name, int age){//.}protected void setAge(int age){//.}static void fun(){//.}}Pola name i age s¹ prywatne, konstruktor Person jest publiczny, metoda setAgejest chroniona, a funkcja fun jest pakietowa (dostêpna w ca³ym pakieciejanb.pkg)._________________________________________________________________________________________DziedziczenieDziedziczenie wyra¿a siê za pomoc¹ frazy extends.Jest ono zawsze publiczne.Ka¿da klasa jest podklas¹ tylko jednej nadklasy.U podstawy hierarchii dziedziczenia znajduje siê klasa Object.Poniewa¿ ka¿daklasa ró¿na od Object ma dok³adnie jedn¹ nadklasê, wiêc struktura klas jestdrzewem.Przyk³ad Dziedziczenie klasclass Person {private String name;private int age;public Person(String name, int age){this.name = name;this.age = age;}}class Woman extends Person {boolean isMarried;public Woman(String name, int age,boolean isMarried){super(name, age);this.isMarried = isMarried;//.}}Klasa Person jest nadklas¹ klasy Woman.Klasa Woman jest podklas¹ klasy Person.Nadklas¹ klasy Person oraz Woman jest klasa Object.Obiekt klasy Person zawiera dwie zmienne opisane przez pola name i age.Obiektklasy Woman zawiera takie same zmienne jak obiekt klasy Person oraz dodatkowo,zmienn¹ opisan¹ przez pole isMarried._________________________________________________________________________________________Klasy abstrakcyjneKlas¹ abstrakcyjn¹ jest klasa zadeklarowana ze specyfikatorem abstract.Jeœlipewna klasa zawiera deklaracjê metody abstrakcyjnej, to jest metodyzadeklarowanej ze specyfikatorem abstract, to musi byæ jawnie zadeklarowanajako abstrakcyjna.Klasa abstrakcyjna ró¿ni siê od klasy nieabstrakcyjnej tym, ¿e nie mo¿natworzyæ jej obiektów bezpoœrednio, to jest za pomoc¹ operacji new albo zapomoc¹ metody fabrykuj¹cej.Dlatego klasy abstrakcyjne s¹ z regu³y dziedziczoneprzez klasy nieabstrakcyjne.Uwaga: Jeœli podklasa klasy abstrakcyjnej nie przedefiniuje wszystkich metodabstrakcyjnych jej nadklasy, to sama staje siê klas¹ abstrakcyjn¹.public abstractclass Shape { // klasa abstrakcyjnafloat x, y;Shape(float x, float y){this.x = x;this.y = y;}public abstractdouble getArea(); // metoda abstrakcyjnafloat getX() // metoda nieabstrakcyjna{return x;}float getY(){return y;}}Klasa Shape zawiera deklaracjê metody abstrakcyjnej getArea oraz definicjedwóch metod nieabstrakcyjnych.Nie wolno pomin¹æ specyfikatora abstractwystêpuj¹cego w nag³Ã³wku definicji klasy._________________________________________________________________________________________Metody abstrakcyjneW miejscu cia³a metody abstrakcyjnej wystêpuje œrednik.W jednej z podklasklasy abstrakcyjnej musi dla ka¿dej metody abstrakcyjnej byæ dostarczona metodanieabstrakcyjna o identycznej sygnaturze, której cia³em jest instrukcjagrupuj¹ca.Uwaga: Dwie procedury maj¹ identyczne sygnatury, jeœli maj¹ takie sameidentyfikatory, a ich listy deklaracji parametrów (po usuniêciu z nichidentyfikatorów) sk³adaj¹ siê z takich samych jednostek leksykalnych.W szczególnoœci, dwie nastêpuj¹ce procedury, mimo i¿ s¹ istotnie ró¿ne(pierwsza jest funkcj¹, a druga metod¹) maj¹ identyczne sygnaturystatic String proc(int one, int[] two[])String proc(int uno, int[][] due)abstractclass Shape {float x, y;Shape(float x, float y){this.x = x;this.y = y;}public abstractdouble getArea(); // metoda abstrakcyjnafloat getX(){return x;}float getY(){return y;}}publicclass Circle extends Shape {static final double Pi = Math.PI;private float radius;Circle(float x, float y, float radius){super(x, y);this.radius = radius;}public double getArea() // metoda nieabstrakcyjna{return Pi * radius * radius;}}W klasie Circle przedefiniowano metodê abstrakcyjn¹ getArea klasy Shape.Gdybyklasa Circle nie zawiera³a definicji metody getArea, to by³aby klas¹abstrakcyjn¹.ZastosowaniaNastêpuj¹cy program, implementuj¹cy stos o elementach niejednorodnych ilustrujezasady pos³ugiwania siê klasami i metodami abstrakcyjnymi.Przyk³ad Projektowanie stosuimport java.io.IOException;abstractclass Item {void out(){System.out.println("Please override me!");}}class IntItem extends Item {private int value;public IntItem(int val){value = val;}void out(){System.out
[ Pobierz całość w formacie PDF ]