- Lista argumentów musi dokładnie pasować. ( ?)
- Taki sam zwracany typ lub subtyp!
- Modyfikator dostępu nie może być bardziej restrykcyjny!
- Modyfikator dostępu może być mniej restrykcyjny.
- jeżeli klasy base i subclass są w tym samym pakiecie to można override metody nie oznaczone private lub final.
- Jeżeli klasy base i subclass są w różnych pakietach to można override metody nie oznaczone final i oznaczone public lub protected!
- Metoda nadpisująca może rzucać unchecked(runtime) wyjątkiem,jakimkolwiek.
- metoda nadpisująca nie może rzucać wyjątkiem(checked) zupełnie nowym lub bardziej ogólnym od metody nadpisywanej!
- metoda nadpisująca może rzucać wyjątkami mniej ogólnymi lub liczbebnością mniej
- metoda nadpisująca nie musi throw jakiekokolwiek wyjątku!
- Nie możeż nadpisywać metod finalnych.
- Nie możesz nadpiywać metod static!
- Jeżeli metoda nie może nie być dziedziczona to nie może być nadpisywana (np private method in base class)
public class Base {
public void publicMethodInBase(){}
public void methodWithException() throws Exception{}
public void methodWithManyExceptions()throws IOException,NotSerializableException{}
public int intReturnMethod(){return 1;}
public void intArgMethod(int x){};
}
public class Subclass extends Base{
/*Bardziej restrykcyjny mod dostępu !*/
//!protected void publicMethodInBase(){}
@Override /*Ob bo wężwzy exception*/
public void methodWithException() throws IOException{}
/*Jest wiecej wyjątków ale węższe od Exception*/
public void methodWithException() throws IOException,NotSerializableException{}
public void methodWithException() {} //ok, bo mniej wyjątków
/*Zonk bo szerszy exception!!*/
//!public void methodWithManyExceptions()throws Exception{}
//!public long intReturnMethod(){return 1;} //zonk bo inny return!
/*To nie overriding lecz overloading!*/
public void intArgMethod(long x){};
}
Brak komentarzy:
Prześlij komentarz