Rozšiřování (dědičnost) rozhraní Tomáš Pitner, Radek Ošlejšek, Marek Šabo Rozšiřování (dědičnost) rozhraní • Rozhraní může převzít (můžeme říci též dědit) metody z existujících rozhraní. • Říkáme, že rozhraní mohou být rozšiřována (extended). • Rozšířené rozhraní by mělo nabízet něco navíc než to výchozí (rozšiřované). • Příklad: Každá třída implementující WellInforming musí pak implementovat i metody z rozhraní Informing: interface Informing {   String retrieveInfo(); } interface WellInforming extends Informing {   String detailedInfo(); } public class Person implements WellInforming {   public String retrieveInfo() { ... }   public String detailedInfo() { ... } } Kde použít implements a kde extends • Ztrácíte se v klíčových slovech? • implements = třída implementuje rozhraní ◦ ve třídě musím napsat kód (obsah) metod předepsaných rozhraním • extends = když dědím ze třídy nebo rozšiřuji rozhraní ◦ dědím metody automaticky Vícenásobé rozšiřování rozhraní • Rozhraní může dědit z více rozhraní zároveň: public interface Informing { String retrieveInfo(); } public interface Screaming { String scream(); } public interface WellInforming extends Informing, Screaming {   String detailedInfo(); } • Každá třída implementující WellInforming musí implementovat všechny 3 metody. 1 Řetězení rozšiřování (dědičnosti) • Dědičnost můžeme řetězit: public interface Grandparent { int method1(); } public interface Parent extends Grandparent { int method2(); } public interface Child extends Parent { int method3(); } • Grandparent pak obsahuje jednu metodu, Parent dvě, Child tři. Kdy je vícenásobné rozšiřování možné • Úplně stejné metody ze dvou rozhraní jsou OK public interface A {   void someMethod(); } public interface B {   void someMethod(); } public interface AB extends A, B {   // it is OK, methods have same signature } Kdy je vícenásobné rozšiřování možné • Stejné metody s různými parametry ze dvou rozhraní jsou také OK public interface A {   void someMethod(); } public interface B {   void someMethod(int param); } public interface AB extends A, B {   // it is OK, methods have different params } Kdy vícenásobné rozšiřování není možné • Dvě metody lišící se jen návratovým typem nejsou OK • Třída implementující rozhraní AB by musela mít dvě metody lišící se jen návratovým typem, a to nejde 2 public interface A {   void someMethod(); } public interface B {   int someMethod(); } public interface AB extends A, B {   // cannot be compiled } 3