Dziedziczenie. dr Jarosław Skaruz

Podobne dokumenty
Wykład 6: Dziedziczenie

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

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

Programowanie obiektowe

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

Dziedziczenie. Tomasz Borzyszkowski

Dokumentacja do API Javy.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Polimorfizm. dr Jarosław Skaruz

Aplikacje w środowisku Java

Klasy abstrakcyjne, interfejsy i polimorfizm

Kurs WWW. Paweł Rajba.

Enkapsulacja, dziedziczenie, polimorfizm

Klasy abstrakcyjne i interfejsy

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

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

Technologie i usługi internetowe cz. 2

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie w Javie - wykład 3

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

Wykład 4: Klasy i Metody

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Programowanie obiektowe i zdarzeniowe

Kompozycja i dziedziczenie klas

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie obiektowe

Java Język programowania

Wykład 7: Pakiety i Interfejsy

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

TEMAT : KLASY DZIEDZICZENIE

Mechanizm dziedziczenia

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Java: interfejsy i klasy wewnętrzne

Programowanie obiektowe

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe - 1.

Zaawansowane programowanie w C++ (PCP)

Diagramy klas. dr Jarosław Skaruz

Programowanie obiektowe

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

Podstawy Języka Java

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

Wykład 5 Okna MDI i SDI, dziedziczenie

Platformy Programistyczne Podstawy języka Java

Mechanizm dziedziczenia

Dziedziczenie i interfejsy

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

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

Programowanie obiektowe i język Java

Kompozycja i dziedziczenie klas

Typy sparametryzowane

Materiały do zajęć VII

PHP 5 język obiektowy

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

.NET Klasy, obiekty. ciąg dalszy

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe w języku

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Definiowanie własnych klas

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

JAVA- wykład 2 Klasy

Podstawy programowania obiektowego

Programowanie obiektowe

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

Programowanie w środowisku graficznym- wykład 2 Java - Klasy

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Programowanie obiektowe

Podstawy programowania III

Dziedziczenie w Javie

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wykład 8: klasy cz. 4

Programowanie w Javie wykład 7 Klasy c.d. (przeciążanie metod, polimorfizm) Metody i klasy abstrakcyjne Bloki inicjalizacyjne

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

PARADYGMATY PROGRAMOWANIA Wykład 4

Podstawa: Bruce Eckel, Thinking in Java, Second Ed., Prentice Hall, 1998 The JavaLanguage Environment, A white Paper, Sun, Oct.

Programowanie obiektowe

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Transkrypt:

Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com

Dziedziczenie

specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami, który łączy klasę bardziej ogólną z jedną lub więcej klas, będących jej specjalizacjami. Klasa, będąca specjalizacją danej klasy, oprócz własności nadklasy może posiadać (i z reguły posiada) też własności swoje. pole atrybutów Osoba nazwisko data ur. wiek pole nazwy klasy pole metod Pracownik pensja Asystent Adiunkt Docent Profesor

Dziedziczenie Dziedziczenie jest to mechanizm paradygmatu programowania obiektowego Przejmowanie stanu (pola) oraz zachowań (metody) obiektu z którego się dziedziczy Tworzenie kategorii (generalization): Klasa bazowa stanowi kategorię (rodzinę typów) na bazie której mogą być tworzone inne typy Nadpisywanie (overriding): zmienianie znaczenia zachowania się typu, z którego dziedziczmy Ponowne wykorzystanie kodu (co-reuse), w innych typach. Dziedziczone są wszystkie elementy klasy nadrzędnej z wyjątkiem konstruktorów. Konstruktor klasy bazowej mogą być wołane z klasy, która dziedziczy. Odwołanie do członków klasy bazowej po przez super. Wołanie konstruktora klasy bazowej: super(); Dwa określenia: klasa bazowa (super klasa, nadklas) i klasa potomna (podrzędna, podklasa) Pole Obwód x y Prostokąt FIGURA Pole Obwód Pole Obwód Pole Obwód obwód promień Koło

Jednokrotne dziedziczenie W Javie można stosować wyłącznie jednokrotne dziedziczenie. Co można robić na poziomie podklasy: Dziedziczone pola mogą być używane bezpośrednio w podklasie Można deklarować zmienne w podklasie o nazwach takich jak w klasie bazowej. Możliwość deklaracji pól w klasie podrzędnej, które nie są w klasie bazowej. Odziedziczone metody mogą być wykorzystywane w klasie podrzędnej bezpośrednio. Możliwość nadpisywania metod z klasy nadrzędnej po przez identyczną deklarację. Możliwość deklaracji metody statycznej w klasie podrzędnej, która przykryje metodę z klasy nadrzędnej Możliwość deklaracji nowych metod w podklasie. Możliwość napisania konstruktora w podklasie, który wywoła konstruktor klasy bazowej.

Typ Object jako przykład klasy bazowej Klasa Object znajduje się na samej górze hierarchii dziedziczenia. Wszystkie klasy dziedziczą po Object. Klasa Object udostępnia zbiór metod, które powinny w miarę potrzeby zostać przeładowane w tworzonych klasach. Przykłady: protected Object clone() throws CloneNotSupportedException Implementuje interfejs Clonable. public boolean equals(object obj) wykorzystywana do porównania dwóch obiektów. W podstawowej implementacji tej metody użyto operatora ==, który daje poprawne wyniki dla typów prymitywnych (porównanie wyłącznie referencji, tzn. czy to ten sam obiekt). Dlatego znając specyfikę klasy należy przeładować tą metodę. protected void finalize() throws Throwable wołana w przypadku, gdy obiekt jest niszczony przez Garbage Collector. public final Class getclass() zwraca nazwę klasy. public int hashcode() zwraca kod klasy w postaci heksadecymalnej. public String tostring()

Modyfikatory i rzutowanie obiektów Podklasa nie dziedziczy elementów klasy bazowej z modyfikatorem private Podklasa dziedziczy elementy klasy bazowej z modyfikatorem protected Należy starać się stosować możliwe najbardziej restrykcyjny modyfikator dostępu. Możliwość rzutowania obiektu klasy podrzędnej na typ obiektu klasy bazowej; Możliwość wymuszonego rzutowania np.: Rower rower = new Rower(); Object obj = new Rower(); Rower newrower = obj; (BŁĄD) kompilator nie wie do jakiego typu został przypisany błąd. Jeśli obj nie jest typu Rower zostanie rzucony wyjątek. Rower newrower = (Rower) obj; W celu zabezpieczenia się przed błędnym rzutowaniem można wykonać następujący test logiczny: if (obj instanceof Rower) { Rower mybike = (Rower)obj;

Nadpisywanie i ukrywanie metod Metoda podklasy z taką samą sygnaturą (nazwa oraz lista parametrów) oraz z tym samym zwracanym typem nadpisuje (override) metodę z klasy bazowej Nadpisywanie pozwala korzystać z typów, które są dla nas prawie wystarczające natomiast częściowo chcemy zmienić ich zachowanie W przypadku wystąpienia w podklasie pól o takich samych nazwach jak w klasie bazowej następuje ich przykrycie przez pola z podklasy. Odwołanie do tych pól możliwe jedynie przez super Uwaga! Jeśli nie chcemy, aby dana metoda została nadpisana należy ją zadeklarować z modyfikatorem final. Również jeśli nie chcemy, aby dana klasa była rozszerzana stosujemy final.

Dziedziczenie

Dziedziczenie

Rozszerzanie klas

Klasa bazowa java.lang.object

Przesłanianie a klasa java.lang.object

Przesłanianie a klasa java.lang.object

Projektowanie obiektowe przykład 1

Projektowanie obiektowe przykład 1

Projektowanie obiektowe przykład 1

Użycie słowa kluczowego super class Pudelko { double szerokosc; double wysokosc; double glebokosc; Pudelko() { szerokosc = -1; wysokosc= - 1; glebokosc =-1;... Pudelko(Pudelko p) { szerokosc = p.szerokosc; wysokosc = p.wysokosc; glebokosc = p.glebokosc;

Użycie słowa kluczowego super class PudelkoPlus extends Pudelko { double ciezar;... PudelkoPlus() { super(); ciezar = 0;

Odwołanie do nadklasy przez super Stosuje się szczególnie, gdy składowe podklasy przesłaniają składowe nadklasy o tych samych nazwach super.pole super.metoda()

Przykład użycia słowa super class A { protected int i; Przesłonięcie pola w nad-klasie: class B extends A { private int i; B(int a, int b) { super.i = a; i = b;

Słowo final Klasa deklarowana jako final nie posiada potomków, nie wolno po niej dziedziczyć. final class A {... Ta klasa jest nielegalna: class B extends A {...

Słowo final c.d. Metodę deklarowaną jako final w nad-klasie nie wolno przesłaniać w pod-klasie: class A { final void meth() { System.out.println("Metoda final"); class B extends A { void meth() { System.out.println("Nielegalne!");

Tak, to już KONIEC Dziękuję za uwagę!