Moduł 7 œ Interfejsy, klasy abstrakcyjne

Transkrypt

Moduł 7 œ Interfejsy, klasy abstrakcyjne
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
74
Modu 7 – Interfejsy, klasy abstrakcyjne
Zawarto
jednostki
Po zrealizowaniu jednostki b dziesz w stanie:
stosowa i tworzy interfejsy
tworzy i wykorzystywa klasy abstrakcyjne
konstruowa programy z u yciem klas finalnych oraz wewn trznych
Wprowadzenie do zagadnie
Niew tpliwym atutem programowania obiektowego jest zbli enie tworzonych programów do sposobu
postrzegania rzeczywisto!ci przez cz"owieka. Przy pomocy klas mo liwe jest modelowanie poj z
dziedziny tworzonego programu. Efektywne wykorzystanie narz dzi OOP (interfejsy, klasy abstrakcyjne,
klasy wewn trzne oraz finalne) pozwala na uzyskanie wysokiej elastyczno!ci w procesie modelowania.
INTERFEJSY
Interfejsy w programowaniu obiektowym to zbiór wymaga* dotycz cych klas, które b d go stosowa .
Wyra aj sposób opisu, co klasa powinna robi bez okre!lania, w jaki sposób b dzie to uzyskane. W
sk"ad interfejsów wchodz metody oraz pola. Deklaracja metod sk"ada si wy" cznie z nag"ówków (brak
jest cia"a metody), natomiast pola interfejsu to wy" cznie sta"e statyczne z jawnie okre!lon warto!ci .
Wszystkie sk"adowe interfejsu musz by publiczne.
<< interface >>
Dzwoni
+ NUMER_ALARMOWY: String
+ zadzwon(String) : void
+ zadzwonNaNrAlarmowy() : void
Telefon
- nrTelefonu : String
- lacznyCzasRozmow : int
- cenaRozmowy : double
+
+
+
+
zadzwon(String) : void
zadzwonNaNrAlarmowy() : void
obliczKwoteDoZaplaty() : double
ustawCeneRozmowy(double) : void
Rysunek 6. Interfejs i klasa implementuj ca.
Klasy korzystaj ce z interfejsu nie rozszerzaj jego mo liwo!ci, ale go implementuj . Oznacza to, e
klasa implementuj ca interfejs musi posiada wszystkie metody89 zdefiniowane w interfejsie (cia"a tych
89
Zgodne z nag"ówkami metod wyst puj cych w interfejsie.
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
75
metod). Sk"adnia definicji interfejsu podobna jest do definicji klasy. Zamiast s"owa class stosowane
jest s"owo kluczowe interface. Mo liwe jest równie dziedziczenie interfejsów90.
interface Dzwoni {
public static String NUMER_ALARMOWY = "112";
public void zadzwon(String);
public void zadzwonNaNrAlarmowy();
}
Proces implementacji polega na umieszczeniu s"owa kluczowego implements w nag"ówku definicji
klasy, po którym wyst puj nazwy interfejsów, które klasa implementuje. Zatem sk"adowymi klasy s
wszelkie pola i metody wyst puj ce w definicji klasy oraz pola i metody okre!lone w definicji
implementowanych interfejsów91. Poni szy kod programu ilustruje implementacj interfejsu Dzwoni
przez klas Telefon.
class Telefon implements Dzwoni{
// deklaracja pól
private String numerTelefonu;
private int lacznyCzasRozmow;
private static double cenaRozmowy = 0.48;
// z</min.
// konstruktor
public Telefon (String numer) {
numerTelefonu = numer;
}
// deklaracja metod
public double obliczKwoteDoZaplaty() {
return cenaRozmowy * (lacznyCzasRozmow / 60);
}
public static void ustawCeneRozmowy(double nowaCena){
cenaRozmowy = nowaCena;
}
// metody wymagane przez interfejs
public void zadzwon(String nrTelefonu) {
System.out.println ("Dzwoni? do: " + nrTelefonu);
System.out.println ("Dry@, dry@...");
System.out.println ("Rozmowa w toku...");
int czasRozmowy = (int) (Math.random()*3600);
lacznyCzasRozmow += czasRozmowy;
System.out.println ("Rozmowa zako@czona. ");
System.out.printf ("Czas rozmowy: %d min. %d sek.",
czasRozmowy/60, czasRozmowy%60);
}
public void zadzwonNaNrAlarmowy() {
System.out.println ("Dzwoni? do: " + Dzwoni.NUMER_ALARMOWY);
System.out.println ("Dry@, dry@...");
System.out.println ("Centrum pomocy, s<ucham");
}
}
public class Test {
public static void main(String args[]) {
Telefon telefonKasi = new Telefon("1276594633");
telefonKasi.zadzwon("606342765");
telefonKasi.zadzwonNaNrAlarmowy();
}
}
Interfejsy, podobnie jak klasy, mog by u ywane jako typ danych przy deklaracji zmiennej92. Warto!ci
takiej zmiennej mo e by odwo"anie do obiektu dowolnej klasy, która implementuje dany interfejs93.
90
Stosowanie interfejsów umo liwa realizacj dziedziczenia wielobazowego.
Klasa na pewno b dzie posiada"a przynajmniej metody wyst puj ce w danym interfejsie/interfejsach.
92
Jest to tak zwane rzutowanie rozszerzaj ce.
91
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
76
KLASY I METODY ABSTRAKCYJNE
Klasy abstrakcyjne wykorzystywane s do modelowania rzeczywisto!ci na do! ogólnym poziomie.
Zawieraj najbardziej znacz ce cechy i zachowania konkretnego typu. Nie wszystkie zachowania
(metody) musz zosta zaimplementowane. Cz ! z nich (nawet wszystkie94) mo e sk"ada si wy" cznie
z nag"ówka (metody abstrakcyjne). Umo liwia to stworzenie ogólnego modelu danego typu bez
konieczno!ci zag" biania si w szczegó"y implementacyjne. Klasa abstrakcyjna nie mo e stanowi
podstawy do utworzenia obiektu, mo liwe jest natomiast tworzenie klas pochodnych. Klasa, która
dziedziczy po klasie abstrakcyjnej musi zaimplementowa wszystkie metody abstrakcyjne wyst puj ce w
klasie bazowej. Deklaracja klasy abstrakcyjnej odbywa si za pomoc s"owa kluczowego abstract
umieszczonego przed nazw klasy. W podobny sposób tworzone s metody abstrakcyjne95.
abstract class Figura {
protected String kolor;
public Figura(String kolor) {
this.kolor = kolor;
}
public abstract double obliczPowierzchnie();
}
class Kwadrat extends Figura {
private double bok;
public Kwadrat(String kolor, double bok) {
super(kolor);
this.bok = bok;
}
public double obliczPowierzchnie() {
return bok * bok;
}
}
class Prostokat extends Figura {
private double szerokosc;
private double wysokosc;
public Prostokat(String kolor, double szerokosc, double wysokosc) {
super(kolor);
this.szerokosc = szerokosc;
this.wysokosc = wysokosc;
}
public double obliczPowierzchnie() {
return szerokosc * wysokosc;
}
}
KLASY I METODY FINALNE
Klasy, z których nie jest mo liwe dziedziczenie nazywane s klasami finalnymi, co wyra ane jest za
pomoc s"owa kluczowego final wyst puj cego w definicji klasy:96
public final class Procesor {
// cia<o klasy (sk<adowe klasy)
}
U ycie s"owa kluczowego final w deklaracji metody powoduje, e nie jest mo liwe jej przes"oni cie w
klasach dziedzicz cych.
93
Odwo"ania do metod, które nie wyst puj w interfejsie mo liwe s za pomoc odpowiedniego rzutowania (rzutowanie
zaw aj ce)
94
W przypadku, gdy klasa sk"ada si wy" cznie z metod abstrakcyjnych, preferowane jest stosowanie interfejsów.
95
Je!li klasa posiada jak kolwiek metod abstrakcyjn , równie musi by abstrakcyjn . Metody abstrakcyjne nie posiadaj
cia"a (nie posiadaj równie nawiasów klamrowych otwieraj cych i zamykaj cych)
96
Przyk"adami klas finalnych s np. klasy opakowuj ce, czy te klasa String.
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
77
KLASY WEWN*TRZNE
Mo liwe jest umieszczenie definicji klasy w obr bie innej klasy. Konstrukcja ta stosowana jest w
przypadku, gdy u ycie klasy jest ograniczone i tworzenie instancji (obiektów) wyst puje wy" cznie w
obr bie jednej klasy.
W przypadku, gdy utworzona klasa znajdzie wykorzystanie tylko w jednej, innej klasie, preferowane jest
zdefiniowanie jej jako klas wewn trzn (mo liwe jest ukrycie jej implementacji). Definicja klasy
wewn trznej musi znale> si w ciele innej klasy97.
class Testowa {
// cia<o klasy g<ównej (sk<adowe klasy)
class KlasaWewnetrzna {
// cia<o klasy wewn?trznej (sk<adowe klasy)
}
}
Klasa wewn trzna posiada dost p do wszystkich sk"adowych klasy w której zosta"a zdefiniowana98. Nie
ma równie adnych ogranicze* co do wykorzystania dziedziczenia czy te implementacji interfejsów.
Szczególnym przypadkiem klas wewn trznych s klasy anonimowe99 (nie posiadaj ce nazwy).
Pytania sprawdzaj ce
1. Okre!l cel i zastosowanie interfejsów.
2. Czy specyfikacja j zyka Java narzuca ograniczenia na liczb interfejsów, jakie mo e implementowa
tworzona klasa?
3. Czy mo liwe jest tworzenie interfejsów pochodnych?
4. W jakim przypadku klasa implementuj ca interfejs nie musi tworzy wszystkich metod
wyst puj cych w tym interfejsie?
5. Które z poni szych deklaracji s b" dne (KlasaA, KlasaB, KlasaC s klasami, a InterfejsA,
InterfejsB, InterfejsC interfejsami)?
class KlasaA extends KlasaB
class KlasaA implements InterfejsA
class KlasaC extends KlasaA, KlasaB
class KlasaB implements InterfejsB, InterfejsC
interface InterfejsA implements InterfejsB
interface InterfejsB extends InterfaceA
interface InterfejsC extends InterfaceA, InterfaceB
6. Sprawd> w dokumentacji, jakie interfejsy implementuje klasa String? Jakie nag"ówki metod s
zdefiniowane w tych interfejsach?
7. Czy poprawny jest poni szy kod?
public interface Tester {
}
8. Czym jest klasa abstrakcyjna?
9. Wska ró nice mi dzy klas abstrakcyjn , a interfejsem.
10. Poni szy kod programu zawiera definicj klasy abstrakcyjnej wraz z jej sk"adowymi. Wska
ewentualne b" dy.
97
Klasy wewn trzne mog by równie definiowane wewn trz metod. Tak utworzone klasy nosz nazw lokalnych klas
wewn trznych.
98
Nawet sk"adowych prywatnych.
99
Klasy anonimowe do! cz sto s wykorzystywane do obs"ugi zdarze* w programowaniu aplikacji korzystaj cych z
graficznego interfejsu u ytkownika.
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
78
public abstract class Zwierze {
private String nazwa;
public abstract void je() {
System.out.println ("Aktualnie je.");
}
public abstract void idzie();
public abstract void pije();
}
11. Czy jest mo liwe utworzenie obiektów na bazie klasy abstrakcyjnej?
12. Czy klasa mo e dziedziczy z klasy abstrakcyjnej? Czy takie dziedziczenie jest mo liwe dla klas
abstrakcyjnych?
13. Zastanów si czy klasa, która dziedziczy z klasy abstrakcyjnej i nie dostarcza implementacji metod
zawartych w nadklasie mo e by klasa nie abstrakcyjn ?
14. Wska b" d w poni szym kodzie programu:
final class A {
private String nazwa;
public String pobierzNazwe() {
return this.nazwa;
}
}
class B extends A {
private int liczba;
public int pobierzLiczbe() {
return liczba;
}
}
15. Czym charakteryzuj si metody finalne?
16. Podaj przyk"ady u ycia klas wewn trznych.
17. Czym s klasy anonimowe? Wska zastosowanie tych klas.
Zadania do wykonania
INTERFEJSY I KLASY ABSTRAKCYJNE
Zadanie 118 – SrodkiTransportu.java
Napisz program modeluj cy istniej ce !rodki transportu u ywane do przemieszczania si zarówno na
l dzie, wodzie, jak i w powietrzu..
Rozwi zanie
Utwórz interfejs Plywa oraz Lata (metody odpowiednio plyn() i lec()). Zdefiniuj klasy
implementuj ce ka dy z interfejsów (np. Statek, Samolot) jak i klas tworz c przyk"adowe
obiekty wraz z wywo"aniem zaimplementowanych metod.
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
79
interface Plywa {
public void plyn();
}
interface Lata {
public void lec();
}
class Statek implements Plywa {
public void plyn(){
System.out.println ("Statek p<ynie");
}
}
class Samolot implements Lata {
public void lec(){
System.out.println ("Samolot leci");
}
}
public class SrodkiTransportu {
public static void main (String[] args) {
Lata samolot = new Samolot();
samolot.lec();
Plywa statek = new Statek();
statek.plyn();
}
}
Zadanie 119 – Hydroplan.java
Hydroplan to !rodek transportu umo liwiaj cy przemieszczanie si zarówno w powietrzu, jak i na
wodzie. Zdefiniuj klas Hydroplan, która implementuje obydwa interfejsy. Sprawd> dzia"anie
przyk"adowego hydroplanu.
Zadanie 120 – OdglosyZwierzat.java
Dokonaj modyfikacji zadania Zwierz?ta.java wyst puj cego w poprzednim module, tworz c
interfejs odpowiedzialny za odg"osy zwierz t. Po utworzeniu interfejsu, zmodyfikuj klasy, które b d
go implementowa oraz sprawd> poprawno! dzia"ania programu. Utwórz trzy nowe klasy dla trzech
nowych zwierz t. Ka da z tych klas powinna implementowa po!rednio lub bezpo!rednio interfejs
Odglos. Interfejs oraz g"ówna klasa:
interface Odglos
public void dajGlos()
class Zwierze implements Odglos
private String nazwa
public void dajGlos()
nowy interfejs
nag(ówek metody (cia(o interfejsu)
klasa implementuj ca interfejs
nazwa zwierz,cia
deklaracja metody wymagana przez interfejs
Zadanie 121 – PorzadkowanieListyStudentow.java
Dost pna jest lista studentów, któr nale y uporz dkowa wed"ug numeru albumu. Napisz program,
który zrealizuje opisan operacj .
Rozwi zanie
Utwórz lub wykorzystaj z poprzednich modu"ów prost klas Student zawieraj c imi , nazwisko
oraz numer albumu studenta. Klasa ta powinna równie implementowa interfejs Comparable
(zapoznaj si z dokumentacj ). Do sortowania tablicy zawieraj cej studentów u yj metody sort() z
klasy java.util.Arrays. Wy!wietl wyniki na konsoli. Poni ej przedstawiona zosta"a
przyk"adowa lista studentów:
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
80
Student[] lista = new Student[4];
lista[0]
lista[1]
lista[2]
lista[3]
=
=
=
=
new
new
new
new
Student("Jan", "Kowalski", 432187);
Student("Adam", "Nowak", 332132);
Student("Joanna", "Wyszek", 632165);
Student("Ania", "Nowak", 321419);
oraz uzyskane wyniki:
Student:
Student:
Student:
Student:
Ania Nowak
Adam Nowak
Jan Kowalski
Joanna Wyszek
nr
nr
nr
nr
albumu:
albumu:
albumu:
albumu:
321419
332132
432187
632165
Interfejs Comparable posiada jedn metod compareTo(Object). Zwraca ona warto!ci typu
int. Gdy obiekty s identyczne, metoda przyjmuje warto! 0 (zero). Je!li obiekt, na rzecz którego
zosta"a wywo"ana metoda jest mniejszy ni obiekt przekazany jako parametr, metoda zwraca warto!
ujemn , w przeciwnym przypadku, warto!
dodatnia.. Metoda sort() z klasy
java.util.Arrays sortuje mi dzy innymi tablice sk"adaj ce si z dowolnych obiektów. Sposób
w jaki dane maj zosta posortowane uzale niony jest od warto!ci zwracanej przez metod
compareTo(Object) wyst puj c w tych obiektach100. Dodatkowo nale y pami ta o konwersji
(rzutowaniu) obiektów z klasy Object do klasy Student w ciele metody porównuj cej. Kod klasy
Student implementuj cej interfejs Comparable wraz z przyk"adem dzia"ania zosta"
przedstawiony poni ej:
100
Klasa na podstawie, której powsta"y obiekty musi implementowa interfejs Comparable.
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
81
import java.util.*;
class Student implements Comparable{
private String imie;
private String nazwisko;
private int nrAlbumu;
public Student(String imie, String nazwisko, int nrAlbumu) {
this.imie = imie;
this.nazwisko = nazwisko;
this.nrAlbumu = nrAlbumu;
}
public int compareTo(Object s){
return (nrAlbumu - ((Student)s).nrAlbumu);
}
public String toString() {
return "Student " + imie + " " + nazwisko + " nr albumu: " + nrAlbumu;
}
}
public class PorzadkowanieListyStudentow {
public static void main (String[] args) {
Student[] lista = new Student[4];
lista[0]
lista[1]
lista[2]
lista[3]
=
=
=
=
new
new
new
new
Student("Jan", "Kowalski", 432187);
Student("Adam", "Nowak", 332132);
Student("Joanna", "Wyszek", 632165);
Student("Ania", "Nowak", 321419);
Arrays.sort(lista);
for(Student student:lista){
System.out.println (student);
}
}
}
Zadanie 122 – ZaawansowanePorzadkowanieListyStudentow.java
Zmodyfikuj kod programu porz dkowuj cego studentów wg numeru albumu tak, aby byli oni
sortowani jednocze!nie wg nazwiska, imienia, oraz numeru albumu. Przyk"adowe rezultaty odnosz ce
si do danych zawartych w poprzednim zadaniu zosta"y przedstawione poni ej.
Student:
Student:
Student:
Student:
Jan Kowalski
Adam Nowak
Ania Nowak
Joanna Wyszek
nr
nr
nr
nr
albumu:
albumu:
albumu:
albumu:
432187
332132
321419
632165
Zadanie 123 – UrzadzeniaMuzyczne.java
Biuro projektowe firmy BOOMBOX zajmuje si projektowaniem nowych linii elektronicznych
urz dze* muzycznych. Przedstaw w j zyku programowania Java model urz dze* odtwarzaj cych
muzyk , wraz z podstawowymi ich w"a!ciwo!ciami (w" cz, wy" cz, start, stop, pauza), który b dzie
stanowi" podstaw dla dalszych prac projektowych.
Rozwi zanie
Utwórz odpowiednie interfejsy oraz klas abstrakcyjn dla kilku urz dze*. Jeden interfejs dla
urz dze*, które mo na w" czy i wy" czy oraz drugi dla odtwarzaj cych muzyk (podstawowe
w"a!ciwo!ci takie jak start, stop, pauza). Ponadto utwórz klas abstrakcyjn (z wykorzystaniem
powy szych interfejsów) przedstawiaj c prosty odtwarzacz oraz klas b d c odzwierciedleniem
odtwarzacza CD. Gotowe rozwi zanie powinno zosta przetestowane poprzez utworzenia
odtwarzacza CD marki Sony i sprawdzenie jego dzia"ania. Poni ej przedstawiony zosta" schemat
interfejsów oraz klas koniecznych do utworzenia programu
interface Wlacza
public void wlacz()
public void wylacz()
public boolean czyDziala()
interfejs dla urz dze2 które mo3na w( czy4 i wy(.
w( czenie urz dzenia
wy( czenie urz dzenia
sprawdzenie czy urz dzenie dzia(a
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
interface Odtwarza
82
public void pauza()
interfejs dla urz dze2 odtwarzaj cych
urz dzenie odtwarza
urz dzenie nie odtwarza
urz dzenie zatrzymane
abstract class Odtwarzacz
implements Wlacz, Odtwarza
klasa abstrakcyjna implementuj ca dwa interfejsy
public void start()
public void stop()
public abstract void ciszej()
pole klasy (aktualna g(o7no74)
pole klasy (stan urz dzenia)
pole klasy (marka urz dzenia)
konstruktor klasy
metoda w( czaj ca urz dzenie
metoda wy( czaj ca urz dzenie
metoda dost,powa
metoda abstrakcyjna
metoda abstrakcyjna
class OdtwarzaczCD
extends Odtwarzacz
klasa reprezentuj ca prosty odtwarzacz CD
protected int glosnosc
private boolean dziala
protected String marka
public Odtwarzacz(String)
public void wlacz()
public void wylacz()
public boolean czyDziala()
public abstract void glosniej()
public OdtwarzaczCD(String)
public void glosniej()
public void ciszej()
public void start()
public void stop()
public void pauza()
public String toString()
konstruktor klasy
metoda zwi,kszaj ca g(o7no74
metoda zmniejszaj ca g(o7no74
metoda uruchamiaj ca odtwarzanie
metoda zatrzymuj ca odtwarzanie
metoda wstrzymuj ca odtwarzanie
metoda zwracaj ca reprezentacj, obiektu w formie
(a2cucha tekstowego
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
interface Wlacza {
public void wlacz();
public void wylacz();
public boolean czyDziala();
}
interface Odtwarza {
public void start();
public void stop();
public void pauza();
}
abstract class Odtwarzacz implements Wlacza, Odtwarza {
protected int glosnosc;
private boolean dziala;
protected String marka;
public Odtwarzacz(String marka){
this.marka = marka;
dziala = false;
}
public void wlacz(){
dziala = true;
}
public void wylacz(){
dziala = false;
}
public boolean czyDziala() {
return dziala;
}
public abstract void glosniej();
public abstract void ciszej();
}
class OdtwarzaczCD extends Odtwarzacz {
public OdtwarzaczCD (String marka){
super(marka);
glosnosc = 10;
}
public void glosniej(){
glosnosc++;
}
public void ciszej(){
glosnosc--;
}
public void start(){
System.out.println ("Odtwarzacz CD odtwarza");
}
public void stop(){
System.out.println ("Odtwarzacz CD nie odtwarza");
}
public void pauza(){
System.out.println ("Odtwarzacz CD zatrzymany");
}
public String toString() {
return "Odtwarzacz CD marki: " + marka + " jest " +
( czyDziala() ? "w<Sczony" : "wy<Sczony") + " G<oTnoTU: " + glosnosc;
}
}
public class UrzadzeniaMuzyczne {
public static void main (String[] args) {
OdtwarzaczCD sony = new OdtwarzaczCD("Sony");
sony.wlacz();
sony.start();
sony.glosniej();
System.out.println (sony);
83
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
84
}
}
Zadanie 124 –NoweUrzadzenieMuzyczne.java
Firma BOOMBOX przygotowuje si do produkcji kolejnej klasy urz dze* – odtwarzaczy MP3.
Rozszerz poprzedni program tak, by uwzgl dnia" t now kategori urz dze* muzycznych. Po
utworzeniu klasy przetestuj j tworz c obiekt b d cy Twoim osobistym odtwarzaczem MP3. Poni ej
przedstawiono stosown definicj klasy.
class OdtwarzaczMP3
extends Odtwarzacz
klasa reprezentuj ca prosty odtwarzacz MP3
dziedzicz ca z klasy Odtwarzacz
private int pojemnosc
pole klasy (pojemno74 urz dzenia)
pole klasy (stan baterii)
private int bateria
public OdtwarzaczMP3(String, int,
int)
public void glosniej()
public void ciszej()
public void start()
public void stop()
public void pauza()
public String toString()
konstruktor klasy
metoda zwi,kszaj ca g(o7no74
metoda zmniejszaj ca g(o7no74
metoda uruchamiaj ca odtwarzanie
metoda zatrzymuj ca odtwarzanie
metoda wstrzymuj ca odtwarzanie
metoda zwracaj ca reprezentacj, obiektu w formie
(a2cucha tekstowego
Zadanie 125 – Radioodbiornik.java
Wzoruj c si na poprzednich zadaniach, utwórz model kolejnego urz dzenia muzycznego –
radioodbiornika. Zastanów si , które interfejsy nale y zastosowa oraz czy wskazane jest
dziedziczenie z klasy abstrakcyjnej. Poni ej umieszczono definicj klasy Radio wraz z jej
sk"adowymi. Utwórz kod programu , a nast pnie przyk"adowe radio.
class Radio
implements Wlacz
private boolean dziala
private String marka
private double czestotliwosc
private int glosnosc
public Radio(String, double)
public void glosniej()
public void ciszej()
public String toString()
klasa reprezentuj ca radio implementuj ca interfejs
pole klasy (stan urz dzenia)
pole klasy (marka urz dzenia)
pole klasy (aktualna cz,stotliwo74)
pole klasy (aktualna g(o7no74)
konstruktor klasy
metoda zwi,kszaj ca g(o7no74
metoda zmniejszaj ca g(o7no74
metoda zwracaj ca reprezentacj, obiektu w formie
(a2cucha tekstowego
KLASY WEWN*TRZNE I FINALNE
Zadanie 126 –TelefonKomorkowyZKartaSIM.java
Ka dy telefon komórkowy posiada kart SIM zawieraj c informacj zwi zane z numerem,
operatorem, ksi k adresow itp. Utwórz model takiego telefonu, korzystaj c z narz dzi zawartych w
j zyku programowania Java.
Rozwi zanie
Napisz klas TelefonKomorkowyZKartaSIM, w której ciele zadeklaruj klas wewn trzn
KartaSIM. Utwórz nowy obiekt klasy wewn trznej, pobierz dane z karty SIM. Sprawd> dzia"anie
tak utworzonej klasy poprzez utworzenie kilku obiektów. Jakie pliki zostan wygenerowane podczas
kompilacji?
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
85
public class TelefonKomorkowyZKartaSIM {
private KartaSIM sim;
public TelefonKomorkowyZKartaSIM(String numer) {
sim = new KartaSIM(numer);
}
// definiujemy klas? wewn?trznS KartaSIM
class KartaSIM {
private String numerTelefonu;
public KartaSIM(String numer) {
numerTelefonu = numer;
}
public String pobierzNumerTelefonu() {
return numerTelefonu;
}
}
public String toString(){
return "Telefon z karta SIM o numerze: " + sim.pobierzNumerTelefonu();
}
public static void main (String[] args) {
TelefonKomorkowyZKartaSIM telefonMarcina = new
TelefonKomorkowyZKartaSIM("507864934");
TelefonKomorkowyZKartaSIM telefonKasi = new
TelefonKomorkowyZKartaSIM("679342123");
System.out.println (telefonMarcina);
System.out.println (telefonKasi);
}
}
Zadanie 127 – Komputery.java
Ka dy komputer posiada procesor. Posiada on dost p do elementów sk"adowych komputera (pami ,
grafika, porty itp.). Chcemy napisa prost klas Komputer posiadaj c klas wewn trzn
Procesor. Utwórz trzy przyk"adowe komputery z ró nymi procesorami. Wykorzystaj poni sze
informacje do tworzenia obiektów jak i samej klasy Komputer.
Komputer dell = new Komputer("Dell","Pentium IV",1.66,1024);
Komputer ibm = new Komputer("IBM","AMD",2.2,2048);
class Komputer
private String marka
private Procesor procesor
private int pamiec
public Komputer(String, String,
double, int)
class Procesor
public String toString()
class Procesor
private String marka
private double czestotliwosc
public Procesor(String, double)
public void rezerwujPamiec(int)
public void zwolnijPamiec(int)
klasa g(ówna
pole klasy (marka komputera)
pole klasy (rodzaj procesora)
pole klasy (zainstalowana pami,4 w MB)
konstruktor klasy
klasa wewn,trzna (patrz ni3ej)
metoda zwracaj ca reprezentacj, obiektu w formie
(a2cucha tekstowego
klasa wewn,trzna klasy Komputer
pole klasy (marka procesora)
pole klasy (cz,stotliwo74 procesora w GHz)
konstruktor klasy
metoda rezerwuj ca okre7lon w MB liczb, pami,ci
metoda zwalniaj ca okre7lon w MB liczb, pami,ci
MODU 7 – INTERFEJSY, KLASY ABSTRAKCYJNE
public String toString()
86
metoda zwracaj ca reprezentacj, obiektu w formie
(a2cucha tekstowego

Podobne dokumenty