- Do protected nie odnosimy się przez .
- Dla klas w innych pakietach do protected członków można dostać się tylko
przez dziedziczenie - Do protected member dostaniemy się z klasy z tego samoego pakietu!!!
- Zmienne lokalne są bez modyfikatorów dostępu
- W zmiennych lokalnych można uzywać final
- Protected= package + subclass throught inheritance
- Klasa nie bastrakcyjna z choć 1 metodą abstract jest illegal!!
- Klasa abstrakcyjna nie musi mieć abstrakcyjnych metod!.
- Pierwsza nie abstrakcyjna klasa musi implementować wszystkie metody abstrakcyjne z superclass.
- static + abstract method are illegal!
- Oznaczenie synchronized stodujemy tylko do metod i bloków kodu!
- Native tylko dla metod! ( deklaracja jak metody anstrakcyjne)
- strictfp tylko dla klas i metod ( nie dla zmiennych!!!! )
- Varargs: void method(int... x) {}
- Varargs musi być ostatnim marametrem!
- Varargs=> 0 lub wiele
- Jeżeli przed konstruktorem damy void to jest traktowany jako metoda.
- Konstruktor nie może być ani final ani static ani abstract!
- Ile zajmuje boolean to zależy od sprzętu!.
- Char i short zajmują 16 bitów.
- Klasy abstrakcyjne mogą implemntować interfejsy!
- Metod ,które są w interfejsie nie trzeba zapisywać w klasie abstrakcuyjnej, dopiero w pierwszej klasie konkretnej!!!
- volatile tylko do zmiennych!
- Jeżeli klasa nie jest public to nazwa nie musi pasować do nazwy pliku!!!
- Metoda private nie może być overriden!!
- throws jest dozwolone po sygnaturze metody abstrakcyjnej!!
- może być synchronized łączone z final i modyfikatorami dostępu.
- Klasa abstrakcyjna może rozszerzać klasę konkretną!!
27 lut 2010
Podstawy cz.2
25 lut 2010
Protected access
public class Parent {
protected int i=14;
}
public class Child extends Parent {
@Test
public void testProtectedAcess(){
prn(i); // z superClass => OK działa
Parent parent = new Parent();
//zadziałała jak 2 klasy sa w tym samym pakiecie!
prn(parent.i);
}
}
- Trzeba się bacznie przypatrzeć!!
TODO
- Przysłanianie metod, które są prywatne w klasie bazowej
- Kiedy obiekty są dostępne dla GC! {scope ,wyjście z metod, różne!!!}
Interfejs
- W pliku java może być kilka interfejsów!
- Interfejs bez moted może być!
- metody interfejsu nie mposiadają ciała!
- Każda metoda interfejsu musi być implementowana w klasie implementującej!
- uwaga! Klasa abstrakcyjna może posiadać abstrakcjyjne jak i nie abstrakcyjne metody!
- Metoda int ok(); jest widziana jako public abstract ok()
- Interfejs może zawierać zmienne ,które są public, static final ( consts) !!
- Nie może posiadać metod statycznych!
- Nie może być oznaczony jako final, strictfp lub native!!
- Interfejs może extend tylko jedną lub kilka interfejsów!!
- Interfejs nie może immplement czegoś!!
- 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
- Czy klasa abstrakcyjna może imlementować interfejs?
- Klasa dziedzicząca z klasy abstrakcyjnej musi dziedziczyć wszytkie metody abstrakcyjne?
- Czy się to skompiluje? final abstract class{}
- 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++ ?
Subskrybuj:
Posty (Atom)