Propustio si dinamicko vezivanje i polimorfizme. To su
jako bitne osobine Java-e kao objektno orjentisanog programskog jezika.
Ukratko
Ukoliko imas interfejs A i implementiras taj interfejs u klasi B - sledeca stvar je dozvoljena
Code:
public interface A {
public void foo();
}
public class B implements A {
public void foo(){
// uradi nesto
}
public void bar(){
// metod koji nije definisan u interfejsu
}
}
// sledeca stvar je dozvoljena
A a = new B();
// sada koristis objekat a kao tip A zato sto je tako inicijalizovan, npr
a.foo();
// ali u isto vrijeme ga mozes koristiti i kao tip B, zato sto je tako instanciran, samo sto ga moras kastovati kako bi Java znala o cemu se radi, npr
(B)a.bar();
Znaci objekat se moze inicijalizovati kao tip A ali se mora instancirati kao tip B (ili bilo koji drugi tip ako ga njegova klasa implementira)
Konkretno u tvom slucaju zelis objekat tipa Path. Dobices ga tako sto ces pozvati staticki metod klase Paths koja vraca tip Path
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Paths.html
Znaci klasa Paths ima metod koji napravi objekat tipa Path ali tako sto inicijalizuje klasu koja ga implementira.
Sada cu napisati
otprilike kako su oni to mozda uradili (cisto da ti bude jasnije)
Code:
// interfejs Path, kasnije ces koristiti ovaj tip
public interface Path{
//metod koji si ti naveo u primjeru
public String toUri();
// svi metodi koji se nalaze u ovom interfejsu ...
}
// da bi koristio interfejs Path moras ga implementirati u nekoj klasi, recimo da ga implementiras u klasi PathImpl
public class PathImpl implements Path{
public String toUri(){
// implementacija ovog metoda
}
// implementacija svih ostalih metoda iz Path interfejsa
}
// sada pravim klasu Paths koja ce imati metod koji ce da za tebe instancira objekat tipa Path i proslijediti ga
public final class Paths{
public static Path get(String uri){
Path p = new PathImpl();
return p;
}
}
//i sada kada ti kazes
Path p1 = Paths.get("uri");
// dobijes objekat tipa Path koji je instanciran u metodu get i prosledjen tebi na koriscenje i mozes da kazes
System.out.println(p1.toUri());
Nadam se da ti je sada jasnije. Obavezno dobro izuci polimorfizme i dinamicko vezivanje.
Pisi ukoliko imas jos pitanja