*1*PODAJ 2 TYPY WIĄZANIA PARAMETROW METODY. W JAKI SPOSOB WIAZANE PARAMETRY W JAVIE? ;
[wykład1]W Javie atrybuty są wiązane statycznie, a metody dynamicznie zależnie od typu aktualnego parametru.
[wykład2-43] parametry można wiązać przy pomocy konstruktorów. Przykład poprawnego użycia:
public class MyVector <S extends Comparable<?>> extends Vector<S>
gdzie <?> to: "użycie białej karty"
**qBa: Parametry mogę być przekazywane przez referencję lub wartość. W Javie przez referencję są przekazywane obiekty, typy prymitywne są przekazywane przez wartość.
***T: Obiekty nie są przekazywane nigdy. Przekazywane są referencje do nich, które są wartościami. Więc - w javie wszystko przekazywane jest jako wartość.
jeśli pomyślisz o obiektach, jako o balonikach, a o wartościach (i referencjach) jako sznureczkach, to wtedy stanie się jasne, że możesz gdzieś przekazać sznureczek (względnie kopię sznureczka), a nie sam balonik. Poza tym balonik może mieć dużo sznureczków.
*2*CO BEDZIE WYNIKIEM WYKONANIA METODY main Z KLASY B? UZASADNIJ
public class A {
publib int a = 0;
public void m() {
System.out.println("this.a =" + a);
}
}
public class B extends A{
public int a = 1;
public void m() {
a++;
System.out.println("this.a =" + a);
}
public static void main(String[] args){
A x = new B();
System.out.println("x.a =" + x.a);
x.m();
}
} ;
!Wypisane będzie
x.a = 0
this.a = 2
Ponieważ x jest typu A to odwołując się do x.a kompilator odwołuje się do nadklasy - atrybuty są wiązane statycznie.
x.m() odwołuje się do metody, a metody są wiązane dynamicznie.
*3* Rozważ następujące klasy. wyjaśnj, które z metod pubSt(), pubOb, priOb(), priSta() mogą być wywołąne w miejscu trzech kropek w punktach (a) i (b)
public class A {
public static int pubSt() { return 1;};
public int pubOb() {return 1;}
private int priOb() {return 1;}
private int priSta() {return 1;}
public int m1 () {
return ... // punkt (a)
}
}
public class B extends A {
public int m1 () {
return ... // punkt (b)
}
}
a) Mogą być wszystkie.
b) Mogę być tylko publiczne i protected, czyli tylko pierwsza i druga.
*4* ZAIMPLEMENTUJ KLASY PERSON I FAMILY, KTÓRE ODPOWIADAJĄ ODPOWIEDNIO OSOBIE ORAZ RODZINIE. PIERWSZA KLASA MA ZAWIERAĆ ATRYBUTY ODPOWIADAJĄCE IMIENIU I NAZWISKU ORAZ PŁCI. KLASA FAMILY MA ZAWIERAC ATRYBUT ODPOWIADAJĄCY MĘŻOWI I ATR ODPOW ŻONIE ORAZ ATR ODP POSIADANYM DZIECIOM. KLASA FAMILY MA ZAWIERAC ROWNIEZ KONSTRUKTOR Z ODPOWIEDNIMI PARAMETRAMI POZWALAJACY DLA 2 OSOB UTWORZYC OBIEKT TYPU RODZINA, JESLI OSOBY TE SA ROZNEJ PŁCI. JEŚLI NIE, TO KONSTRUKTOR MA RZUCAĆ ODPOWIEDNI WYJĄTEK ;
public class Person{
public String imie;
public String nazwisko;
public int plec; //0 - mezczyzna, 1 - kobieta
Person(){}
}
public class Family{
public Person maz;
public Person zona;
public Vector<Person> dzieci;
Family(Person a, Person b) throws IllegalArgumentException{
if(a.plec==b.plec)
throw new IllegalArgumentException();
if(a.plec>0){
Person c = a;
Person a = b;
Person b = c;
}
maz = a;
zona = b;
dzieci = new Vector<Person>();
}
}