Programowanie w Internecie



Pobieranie 240,32 Kb.
Data05.07.2018
Rozmiar240,32 Kb.

Wykład 3

Dziedziczenie, polimorfizm, tablice, aplety

Przeciążanie metod, przedefiniowanie metod, wstęp do trybu graficznego, dostęp do metod i zmiennych


Przedefiniowanie nazwy metody met1(...) dziedziczonej wymaga :

  • identycznego nagłówka met1(...) w metodzie klasy dziedziczącej

  • jest to domyślna metoda klasy dziedziczącej

  • metodę bazową w ciele metod klasy dziedziczącej wywołuje się: super.met1(...)


Przeciążenie nazwy metody met2(...) wymaga

  • identycznej nazwy met2

  • różnej liczby parametrów

  • różnych typów parametrów, jeśli ich liczba jest identyczna

  • typ wyniku zwracanego przez return nie przeciąża nazwy metody


Przykład 1 - wykonanie programu prezentującego dziedziczenie, przedefiniowanie i przeciążenie metod


import java.lang.*;

class Punkt

{ int x, y;

Punkt(int wspX, int wspY)

{ x = wspX; y = wspY;}


void zmien(int wspX, int wspY)

{ x = wspX; y = wspY;}


int podajX()

{ return x; }



int podajY()

{ return y; }


void przesun(int dx, int dy)

{ x+= dx;

y+= dy; }

int pole ()

{ return 0;}








double odleglosc(Punkt p)

{ return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); }

}

class Kwadrat extends Punkt

{

int dlugosc;


Kwadrat(int wspX, int wspY, int dlugosc_)

{ super(wspX, wspY);` //wywołanie dziedziczonego konstruktora od klasy Punkt

dlugosc = dlugosc_; //ponieważ klasa nie posiada konstruktora domyślnego

}

int podajDl()

{ return dlugosc; }

int pole()

{ return dlugosc*dlugosc; }



double odleglosc() //przeciążenie nazwy metody dziedziczonej

{ return Math.sqrt(x*x+y*y); }


double odleglosc(Punkt p) //przedefiniowanie nazwy metody dziedziczonej

{ return odleglosc() //wywołanie metody przeciążonej

+ super.odleglosc(p); } //wywołanie metody dziedziczonej

// gdy jest przedefiniowana



double odleglosc(Punkt p, int i) //przeciążenie nazwy metody dziedziczonej

{ return super.odleglosc(p); } //wywołanie metody dziedziczonej,

// gdy jest przedefiniowana

}


public class punkt1 //klasa publiczna, nieabstrakcyjna, niefinalna

{



public static void main (String[] args)

{


Kwadrat k1 = new Kwadrat(2,10,1);

System.out.println("WspolrzednaX = "+ k1.podajX());

System.out.println("WspolrzednaY = "+ k1.podajY());

System.out.println("Dlugosc boku = " + k1.podajDl());

Punkt p2 = new Punkt(4,6);

System.out.println("\nWspolrzednaX = "+ p2.podajX());

System.out.println("WspolrzednaY = " + p2.podajY());

System.out.println(

"\nOdleglosc miedzy punktami\n(4,6),(2,10)="

+ p2.odleglosc(k1));

p2.zmien(1,5);

System.out.println(

"\nSuma odleglosci miedzy punktami\n(0,0),(2,10),(1,5)="

+k1.odleglosc(p2));

System.out.println(

"\nOdleglosc miedzy punktami\n(2,10),(1,5)="

+ k1.odleglosc(p2,0));

System.out.println(

"\nOdleglosc miedzy punktami\n(0,0),(2,10)="

+ k1.odleglosc());

System.out.println("\nPowierzchnia = "+ k1.pole());

}

}



2. Dostęp do metod i zmiennych
Dostęp do zmiennych (na podstawie:L.Lemay,R.Cadenhead,Java 2 dla każdego, Helion 2001)

Zakres

widzialności”



metody lub zmiennej

public

protected

domyślny

private

Klasa

tak

tak

tak

tak

Pakiet

tak

tak

tak

nie

Inny pakiet

tak

nie

nie

nie

Podklasa, pakiet

tak

tak

tak

nie

Podklasa,

inny pakiet

tak

tak

nie

nie

3. Tablice

Tablice w aplikacjach typu Windows

Tablica w Javie jest obiektem.



  • Deklarowanie tablicy

String [] nazwy; //równoważne deklaracje zmiennej tablicowej

String nazwy []; // czyli referencji do obiektu tablicy, deklarujące elementy obiektowe



int liczby[]; //zamienna tablicowa deklarująca elementy nieobiektowe

  • Tworzenie obiektu tablicowego

int liczby []= new int [10;]

// utworzono tablicę 10 elementów typu int

String nazwy []= new String[10];

// utworzono tablicę 10 referencji typu String, należy dla każdego elementu tablicy przydzielić pamięć



  • Przydział pamięci na elementy obiektowe tablicy

np. nazwy[0]= new String(”Pewien wiersz”);

//przydzielono pamięć na obiekt typu String w pierwszym elemencie tablicy (liczby[0])



  • Pobranie rozmiaru tablicy

nazwy.length

Przykład 2. – Tablica obiektów z rodziny klasy Punkt (tryb tekstowy)

import java.lang.*;

class Punkt

{ int x, y;

Punkt(int wspX, int wspY) { x=wspX; y = wspY;}

int podajX() { return x;}

int podajY() { return y;}

double odleglosc(Punkt p)

{ return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)); }

}

class Kwadrat extends Punkt

{ int dlugosc;

Kwadrat(int wspX, int wspY,int dlugosc_)

{ super(wspX,wspY);

dlugosc=dlugosc_;}

double odleglosc()

{ return Math.sqrt(x*x+y*y); }



double odleglosc(Punkt p)

{ return odleglosc()+ super.odleglosc(p);}



int podajDl() { return dlugosc;}

}


public class Tablice

{ public static void main(String args[])

{final int N=5;

int liczby [] = new int [N];

for (int i=0; i

{ liczby[i]= i;

System.out.println(liczby[i]); }

String nazwy[]=new String[N];



for (int i=0; i{ nazwy[i]=new String("lancuch "+i);

System.out.println(nazwy[i]);}

Punkt figury[]=new Punkt[N];



for (int i=0; i{ figury[i]=new Punkt(2,2);



if (ifigury[++i]= new Kwadrat (2,2,2);}



for (int i=0; i{boolean p=figury[i] instanceof Kwadrat;

System.out.println(p+

",X="+figury[i].podajX()+

", Y="+figury[i].podajY()+

", odleglosc="+figury[i].odleglosc(figury[i+1]));



}

}



P

rzykład 3.
Rysowanie w trybie graficznym obiektów z rodziny klasy Punkt pobieranych z tablicy

import java.lang.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class Punkt

{ int x, y;

Punkt(int wspX, int wspY)

{x = wspX; y = wspY;}



void rysuj(Graphics g)

{ Graphics2D g2D= (Graphics2D)g;

Color pedzel =new Color(255,0,0);


public class Tablice

extends JFrame

{ public Tablice()

{ super ("Tablice");

setSize(150,200);

setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE);

Rysunek rys=new Rysunek();

getContentPane().add(rys);

}
public static void main(String args[])

{ Tablice tab=new Tablice();

tab.show();}

}

g2D.setColor(pedzel);

g2D.fillOval(x,y,5,5);}

}

class Kwadrat extends Punkt

{ int dlugosc;

Kwadrat(int wspX, int wspY,int dl)

{ super(wspX,wspY);

dlugosc=dl_;}



void rysuj(Graphics g)

{Graphics2D g2D=(Graphics2D)g;

Color pedzel=new Color(0,255,0);

g2D.setColor(pedzel);

g2D.fillRect(x,y,dlugosc,dlugosc);}

}
class Rysunek extends JPanel

{ public void paintComponent(Graphics g) //przedefiniowanie metody klasy JPanel

{ final int N=4;

Punkt figury[]=new Punkt[N]; //utworzenie tablicy figur z rodziny klasy Punkt

for (int i=0; i

{ figury[i]= new Punkt(i*20+5, i*20+5); //albo typu Punkt

if (i

figury[++i]= new Kwadrat (i*30+10, i*30+10, i+30);}

for (int i=0; i

figury[i].rysuj(g); } //automatyczne rysowanie albo punktu albo kwadratu

}

4. Aplety – zastosowanie polimorfizmu



Tryb graficzny: pakiety java.awt oraz javax.swing

  • Aplety są uruchamiane w dowolnej przeglądarce sieciowej obsługującej język Java

np. NetScape Navigator, Microsoft Internet Explorer

  • Do uruchomienia apletu w celu przetestowania można korzystać z narzędzia appletviewer dołączonego do pakietu Javy

  • Dołączenie dodatkowego modułu do przeglądarki sieciowej o nazwie Java Plug-in umożliwia korzystanie z rozszerzeń języka Java 2 przy budowie apletu

  • Należy utworzyć dwa pliki:




  1. Np. plik MojAplet.java z kodem źródłowym, czyli klasą która dziedziczy od klasy Applet i sprawia, że wykonany aplet staje się częścią przeglądarki

import java.awt.*;



import java.applet.*;

// przedefiniowanie metod klasy Applet



public class MojAplet extends Applet

{

public void init()

{// np. tworzenie obiektów ; tylko raz może być wykonana

}

public void start()

{//ponowne uruchomienie apletu, można ją wielokrotnie wykonywać;

//np. wyświetlanie komunikatów, uruchamianie wątków

}

public void stop()

{//wykonywana, gdy użytkownik opuszcza stronę lub gdy aplet sam wywoła

//stop; np. zawieszanie wątku uruchomionego przez aplet

}

public void destroy()

{//usuwanie danych roboczych, wątków itp. utworzonych przez aplet

}

public void paint(Graphics g)

{//pozwala na wyświetlanie danych w swoim oknie dzięki obiektowi typu

//Graphics utworzonemu przez przeglądarkę (import java.awr.Graphics;)

//reprezentuje on rysowany obszar w oknie

}

}




  1. strona www zawierająca znacznik

    (przykład 3)


    1. wywołanie apletu wstawionego na stronę www

    http://sprocket.ict.pwr.wroc.pl/~zkruczkiewicz/wyklady/java/classes/P3_6.htm

    Przykład 4 – Wykonanie apletu za pomocą programu appletviewer.exe. Aplet wykonuje w trybie graficznym operacje takie jak w programie z przykładu 1.

    //plik P3_6.htm












    code = "P3_6.class"

    width = "500"

    height = "300"



    >









©operacji.org 2017
wyślij wiadomość

    Strona główna