25 lut 2010

Interfejs

  1. W pliku java może być kilka interfejsów!
  2. Interfejs bez moted może być!
  3. metody interfejsu nie mposiadają ciała!
  4. Każda  metoda interfejsu musi być implementowana w klasie implementującej!
  5. uwaga! Klasa abstrakcyjna może posiadać abstrakcjyjne jak i nie abstrakcyjne metody! 
  6. Metoda int ok(); jest widziana jako public abstract ok()
  7.  Interfejs może zawierać zmienne ,które są public, static final ( consts) !!
  8. Nie może posiadać metod statycznych!
  9. Nie może być oznaczony  jako final, strictfp lub native!!
  10. Interfejs może extend  tylko  jedną lub kilka interfejsów!!
  11. Interfejs nie może immplement czegoś!!
  12. Każda metoda w interfejsie jest public i abstract!




//private interface Bouncable {} nie może być private
//protected interface Bouncable {} // nie wolno
abstract interface Bouncable2{};
//public abstract interface dsd{} nie ładzia
public interface Bouncable{

//test zmiennych
int ok=1; //widziana jako public static final !!!!!!!!!!!!!!!
//!int ok2; //musi być zainicjalozowana ( bo stała!!)

//!protected int ok=2; nie wolno

final int ok2=9; //ok
static int ok3=12; //ok
public int ok4=99; //ok

public abstract int ok(); //działa
int ok2(); //UWAGA!! i tak jest widziana jako public abstract!!

//!int ok3(){}; metody interfejsu nie mposiadają ciała!

//test static
//! static int metodaStatyczna(); nie może być STATIC!!

//test final
//!final void doSth(); niedozwolone
//!private void doSth(); niedozwolone

}

Pytania

  1. Czy klasa abstrakcyjna może imlementować interfejs?
  2. Klasa dziedzicząca z klasy abstrakcyjnej musi dziedziczyć wszytkie metody abstrakcyjne?
  3. Czy się to skompiluje? final abstract class{}
  4. Czy klasa abstrakcyjna musi mieć jakąkolwiek motedę lub zmienną ?

Klasa abstrakcyjna


abstract class Car{

private double price;//ok
private final int x=5;//ok

private static int $=9; //ok

private static final int _=9; //ok

/*variable cannot be abstract*/
//public abstract int i;

/* klasa abstrakcyjna nie ma ciała!*/
// public abstract int getInt(){};

public abstract int getInt(); //ok

/*niedozwolona kombinacja*/
//!private abstract int getIntPriv(); //ok

protected abstract int getIntPriv(); //ok
abstract int getInt2(); //ok


public int normalMethodWithBody(){ //ok

byte b=9; //ok
b=b++; //ok szok!!
return b; //autmoatyczna promocja typów na szerszy :D
}

}



  • Jeżeli klasa posiada choć 1 metodę abstract to cała klasa musi być abstract!
    >


  • Klasa dziedzicząca z klasy abstrakcyjnej musi dziedziczyć wszytkie metody abstrakcyjne!



Inkrementacja byte


byte x=7;
b++; //ok
b=b++;//ok
b=(b+10); // promocja b+10 na inta , trzeba cast
b=(byte)(b+10); // ok


Co się stanie po b++ ?

23 lut 2010

Deklaracja klasy -plik


  1. Tylko jedna publiczna klasa w pliku!
  2. komentarz może pojawić się na pozątku lub końcu każdej linii.
  3. Nazwa klasy publicznej musi być identyczna z nazwą pliku!
  4. Jeśli klasa jest częścią package to linia z package musi być pierwszą nie komentarzową linią!
  5. Linie z import muszą być pomiedzy package a deklaracją klay!
  6. import i package odnosi sie do całego pliku i może być tylko 1.
  7. Plik może zwierać więcej niepublicznych klas!
  8. Plik bez publicznej klasy nie musi pasować nazwą do czegokolwiek!

JavaBeans


  1. Pola prywatne
  2. metody get i set są public
  3. public void setCosik(int x)
  4. public int getCosik();
  5. Dla boolean : getBool() albo isBool().
  6. Event: public void addMyListener(MyListener m) //takei same nazwy!
  7. Przedrostek add i remove tylko w połączeniu z Listener!!!
  8. nie ma delete!!!

Nazwy identyfikatorów

  1. Identyfikator musi zaczynać się od: $,_ , lub litery.
  2. identyfikator nie może zaczynać się od cyfry!
  3. Kolejne znaki mogą być: cyfrą,literą,$,_.
  4. Nie ma limitów na długość ident.
  5. Nie możesz używać słów kluczowych javy.
  6. foo i Foo to dwa różne identyfikatory!!


  7. Wszystko tyczy się także nazw metod i klas




@Test
public void testIdentyfikatorow() {
//GOOD
int _=5;
int $=5;
int a=8;
int $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=2;
int _____________________________________=3;
int _1234=4;

//BAD!!

//!int a:=9;
//!int e#=9;
//!int .f=9;
//!int 7g;
//!int enum=5 //bo keyword

}

public void ___(){ } //correct
public void $(){} //correct
public void _$_(){} //corect

private class ${}; //correct
private class ________{}//correct