Rozdział 6. Classes

Overloading Methods
  1. Ta sama nazwa, inna liczba lub typ argumentów.
  2. Różna może być dostępność, zwracany typ, lista wyjątków.
  3. Metoda jest unikalna jeśli chodzi o klasę, w której sie znjaduje, nazwę, typ zwracany, kolejność (typ) i liczbę argumentów.
Metodę definiuje jej nazwa, liczba i rodzaj (kolejność, typ) argumentów.

Overriding Methods
  1. Overloaded muszą mieć inną listę argumentów; Overriding - ten same typy i kolejność argumentów.
  2. Typ zwracany Overloaded method może być dowolny; Overriding - identyczny, lub klasa pochodna typu zwracanego przez parenta.
  3. Overloaded - dowolna liczba wyjątków; Overriding - muszą dziedziczyć po parencie? Albo może nie rzucać wyjątków! Wpp błąd.
  4. Overloaded - dowolny access mofifier; Overloaded - przynajmnije taki jak parent. Wpp błąd.
Konstruktory
super(params), this(params) - możliwość wołania konstruktora klasy nadrzędnej i obecnej. Instrukcje te muszą pojawić się jako pierwsze w konstruktorze. Jeśli w konstruktorze klasy pochodnej nie ma super(params), to kompilator automatycznie wstawi tam wywołanie domyślnego konstruktora klasy nadrzędnej. Jeśli wołamy this(params), kompilator nie wstawia super, lecz odwleka to do wołanego konstruktora. Jeśli klasa dostarcza konstruktor z parametrami, Java nie dostarcza już konstruktora bezparametrowego. Jeśli zaś klasa nie ma zdefiniowanych konstruktorów, Java dostarcza domyślny bezargumentowy.

Klasy wewnętrzne
Klasy wewnętrzne mają dostęp do wszystkich atrybutów i metod (private) klasy zewnętrznej.

public static void main(String args[]) {
OuterOne.InnerOne i = new OuterOne().new InnerOne();
i.innerMethod();
}

jest tym samym co:

public static void main(String args[]) {
OuterOne o = new OuterOne();
OuterOne.InnerOne i = o.new InnerOne();
i.innerMethod();
}

W przypadku definicji statycznej klasy wewnętrznej, nie ma ona dostępu do nie-statycznych pól klasy obudowującej. Stworzenie klasy wewnętrznej nie wymaga w taki wypadku tworzenia klasy obudowującej:
MyInner aMyInner = new MyOuter.MyInner();

Klasy wewnątrz metod
  1. Klasy zadeklarowanie wewnątrz meotdy są prywatne i nie mogą mieć żadnego modyfikatora zakresu.
  2. Meotdy te mogą odwoływać się do zmiennych klasy (też prywatnych) oraz finalnych zmiennych używanych wewnątrz metody.

public void go(int x, final int y) {
int a = x + y;
final int b = x - y;
class MInner {
public void method() {
System.out.println(“m is “ + m);
// System.out.println(“x is “ + x); //Illegal!
System.out.println(“y is “ + y);
// System.out.println(“a is “ + a); //Illegal!
System.out.println(“b is “ + b);
}
}
MInner that = new MInner();
that.method();
}


Klasa anonimowa
  1. Może extends lub implements (nie oba na raz i tylko 1 interface) - nie używa się nawet słów kluczowych implements czy extends.
  2. Klasa anonimowa nie może posiadać zaimplementowanego przez siebie konstruktora, bo nie ma nazwy. Można jednak użyć nie domyślnego konstruktora:

Button b = new Button(“Anonymous Button“) {
...
};


Enumerations
  1. Można deklarować wtedy co klasy.
  2. Podczas kompilacji generowany jest plik .class z enum'em.
  3. Dziedziczy po Object.
  4. Może zawierać main().
  5. Jeśli enum posiada atrybut bez wartości w (), musi dostarczyć domyślny konstruktor.

enum Suit {
DIAMOND(true), HEART(true), CLUB(false), SPADE(false);

private boolean red;

Suit(boolean b) {
red = b;
}

public boolean isRed() {
return red;
}

public String toString() {
String s = name();
s += red ? ":red" : ":black";
return s;
}
}

Brak komentarzy:

Prześlij komentarz