Java: interfejsy i klasy wewnętrzne

Podobne dokumenty
Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Dokumentacja do API Javy.

Programowanie obiektowe

Wykład 7: Pakiety i Interfejsy

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Klasy abstrakcyjne, interfejsy i polimorfizm

Polimorfizm. dr Jarosław Skaruz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Klasy abstrakcyjne i interfejsy

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Enkapsulacja, dziedziczenie, polimorfizm

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Kurs WWW. Paweł Rajba.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Współbieżność w środowisku Java

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Dziedziczenie. dr Jarosław Skaruz

Aplikacje w środowisku Java

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Przypomnienie o klasach i obiektach

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Język JAVA podstawy. Wykład 4, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

PHP 5 język obiektowy

Platformy Programistyczne Podstawy języka Java

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Przykład -

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

1 Atrybuty i metody klasowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe. Wykład 03. Maciej Wołoszyn 17 marca Polimorfizm oraz wczesne i późne wiazanie

Języki programowania imperatywnego

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Typy sparametryzowane

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Wykład 6: Dziedziczenie

MAS dr. Inż. Mariusz Trzaska. Realizacja różnych modeli dziedziczenia w obiektowych językach programowania

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Programowanie obiektowe

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Systemy Rozproszone - Ćwiczenie 6

Programowanie obiektowe

Wykład 5: Więcej o Klasach i Metodach

Programowanie w Javie wykład 8 Interfejsy

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Programowanie obiektowe

Podstawy programowania III

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Języki i techniki programowania Ćwiczenia 2

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

10. Programowanie obiektowe w PHP5

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Java Język programowania

Programowanie obiektowe

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie obiektowe

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Programowanie w Internecie. Java

Współbieżność w Javie

Programowanie 2. Język C++. Wykład 3.

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Współbieżność w Javie

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie Obiektowe (Java)

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

UML a kod. C++, Java i C#

Wywoływanie metod zdalnych

Programowanie obiektowe w VB cz 2

Transkrypt:

Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1

INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania jak powinna to robić. Interfejs może być porównany do klasy abstrakcyjnej, ale w rzeczywistości nie jest klasą tylko zbiorem wymagań dla klas, które chcą dostosować się do tego interfejsu. Klasa implementująca interfejs musi implementować wszystkie metody interfejsu (chyba, że są to klasy abstrakcyjne). Interfejsy nie posiadają zmiennych składowych, ale mogą zawierać stałe. Każde pole składowe jest automatycznie traktowane jako public static final. Wszystkie metody interfejsu są automatycznie publiczne. public interface MojInterfejs{! /*! * stałe i deklaracje metod! */ 2

PRZYKŁAD WŁASNEGO INTERFEJSU PrzedstawiajacySie - klasa, której obiekty potrafią się przedstawić public interface PrzedstawiajacySie {! String przedstawsie(); class A implements PrzedstawiajacySie { public String przedstawsie() { return "Jestem klasa A \n"; class B { public String przedstawsie() { return "Jestem klasa B \n"; class Test { public static void kimjestes( PrzedstawiajacySie obj ){ System.out.print(obj.przedstawSie()); PrzedstawiajacySie ps = new PrzedstawiajacySie(); // BŁĄD! nie można utworzyć obiektu PrzedstawiajacySie PrzedstawiajacySie ps = new A(); // ale można utworzyć referencje do tego typu // i przypisać obiekt klasy implementującej ten interfejs ArrayList<PrzedstawiajacySie> al = new ArrayList<PrzedstawiajacySie>(); p.add( new A() ); p.add( new B() ); // BŁĄD! C nie implementuje interfejsu PrzedstawiajacySie for (int i=0; i<p.size(); ++i){! Test.kimJestes( al.get(i) ); 3

PRZYKŁAD STANDARDOWEGO INTERFEJSU Comparable - klasa, której obiekty mogą być porównywane interface Comparable{! int compareto(object inny); class Osoba implements Comparable{! String imie = "";! String nazwisko = "";! int wiek;! public int compareto(object obj) {!! Osoba inna = (Osoba) obj;!! if ( wiek!= inna.wiek ) return (wiek>inna.wiek)?1:-1;!! if ( nazwisko.equals(inna.nazwisko) ) return nazwisko.compareto(inna.nazwisko);!! if ( imie.equals(inna.imie) ) return imie.compareto(inna.imie);!! return 0;! Interfejs Comparable wykorzystywany jest między innymi do sortowania. Osoba [] tab_os; /*... */ Arrays.sort(tab_os); // możliwe tylko jeśli klasa Osoba implementuje interfejs Comparable 4

DZIEDZICZENIE I IMPLEMENTACJA INTERFEJSÓW Klasa może dziedziczyć tylko po jednej klasie, ale może implementować wiele interfejsów. Interfejsy mogą dziedziczyć inne interfejsy. interface IA {! void fun_ia(); interface IB extends IA {! void fun_ib(); interface IC {! void fun_ic(); class Klasa implements IB, IC {! public void fun_ib() { /*... */! public void fun_ia() { /*... */! public void fun_ic() { /*... */ 5

STAŁE W INTERFEJSACH Interfejsy, poza metodami, mogą posiadać również pola składowe - publiczne, stałe i finalne. Jeśli klasa implementuje interfejs pola te są bezpośrednio dostępne wewnątrz tej klasy. interface TypZasobu{! int inny = 0;! int ksiazka = 1;! int gazeta = 2; abstract class Zasob implements TypZasobu{! int typ;! public int jakityp() { return typ; class Ksiazka extends Zasob{! { typ = ksiazka; Zasob zasob = new Ksiazka(); switch ( zasob.gettyp() ){! case Zasob.ksiazka : System.out.println("Zasob jest ksiazka"); break;! case Zasob.gazeta : System.out.println("Zasob jest gazeta"); break;! default : System.out.println("Zasob jest czyms innym"); 6

SPRZETY DOMOWE jeszcze jeden przykład wykorzystania interfejsów interface Wlaczany {! boolean wlacz();! boolean wylacz();! boolean OPERACJA_UDANA = true;! boolean OPERACJA_NIEUDANA = false; interface Stan {! int WYLACZONE = 0;! int WLACZONE = 1;! int STAN_CZUWANIA = 2; 7

LAMPKA class Lampka implements Wlaczany, Stan {! int stan;! public boolean wlacz() {!! stan = WLACZONE;!! public boolean wylacz() {!! stan = WYLACZONE;! 8

KOMPUTER class Komputer implements Wlaczany, Stan {! int stan;! boolean cosrobi = false;! public boolean wlacz() {!! stan = WLACZONE;!! public boolean wylacz() {!! if (stan == WYLACZONE!cosRobi)!! {!!! stan = WYLACZONE;!!!!! return OPERACJA_NIEUDANA;! 9

TELEWIZOR class Telewizor implements Wlaczany, Stan {! int stan;! public boolean wlacz() {!! stan = WLACZONE;!! public boolean wylacz() {!! stan = WYLACZONE;!! public boolean przejdzwstanczuwania() {!! if (stan == WLACZONE){!!! stan = STAN_CZUWANIA;!!!!! return OPERACJA_NIEUDANA;! 10

LODÓWKA class Lodowka implements Wlaczany{! private void wlaczwtyczkedokontaktu() {!/*... */! private void wyciagnijwtyczkezkontaktu() {!/*... */! public boolean wlacz()! {!! wlaczwtyczkedokontaktu();!! public boolean wylacz() {!! wyciagnijwtyczkezkontaktu();! 11

GDY JEDZIEMY NA WAKACJE... ArrayList<Wlaczany> sprzetydomowe = new ArrayList<Wlaczany>(); sprzetydomowe.add(new Lampka()); sprzetydomowe.add(new Komputer()); sprzetydomowe.add(new Telewizor()); sprzetydomowe.add(new Lampka()); sprzetydomowe.add(new Lodowka()); sprzetydomowe.add(new Telewizor()); for (int i=0; i< sprzetydomowe.size(); ++i ) {! if (sprzetydomowe.get(i).wylacz() == Wlaczany.OPERACJA_NIEUDANA)!! System.out.println("Błąd wyłączania sprzetu nr " + ( i+1 ) ); 12