Przejdź do zawartości

Dyskusja:Interfejs (programowanie obiektowe)

Treść strony nie jest dostępna w innych językach.
Z Wikipedii, wolnej encyklopedii
'''Interfejs''' – w [[obiektowy język programowania|obiektowych]] [[język programowania|językach programowania]] [[C Sharp|C#]] i [[Java]] specjalna konstrukcja ([[typ (informatyka)|typ]]) podobna do [[klasa (programowanie obiektowe)|klasy]] (dokładniej do [[klasa abstrakcyjna|klasy abstrakcyjnej]]), która posiada jedynie deklaracje [[metoda (programowanie obiektowe)|metod]] bez podawania ich implementacji. Interfejs służy jedynie temu, aby klasy mogły go implementować, a więc podawać implementacje wszystkich jego metod. Zaletą interfejsów jest to, że o ile klasa może [[dziedziczenie (programowanie obiektowe)|dziedziczyć]] tylko po jednej klasie, to może implementować dowolnie wiele interfejsów.

=====Przykład=====

 interface Figura {    // deklaracje interfejsu
   double pole();      // deklaracja metody interfejsu
 }
 
 class Kolo implements Figura {   // implementacja interfejsu 
   private double promien;
   Kolo( double promien ) {
     this.promien = promien;
   }
   
   public double pole() {
     return 3.14 * promien * promien;
   }
 }
 
 class Kwadrat implements Figura {   // implementacja interfejsu 
   private double bok;
   Kwadrat( double bok ) {
     this.bok = bok;
   }
   
   public double pole() {
     return bok * bok;
   }
 }
 
 public class Program {
   public static double obliczPole( Figura obj ){
     return obj.pole();
   }
   
   public static void main( String[] args ) {
     // Figura f = new Figura(); // niemożliwe: Figura jest interfejsem
     Kolo ko = new Kolo( 2 );
     Kwadrat kw = new Kwadrat( 2 );
     System.out.println( obliczPole( ko ) );
     System.out.println( obliczPole( kw ) );
   }
 }
[[en:Interface (Java)]]

====Zobacz też====
*[[Klasa (programowanie obiektowe)]]

Kompletnie niezrozumiały artykuł

[edytuj kod]

Uważam, że artykuł jest kompletnie niezrozumiały. Dzięki słowom kończącym się na -cja (implementacja, hermetyzacja) nie staje się mądrzejszy.

Po pierwsze: do czego służy interfejs? Jakie mam z niego korzyści?
Po drugie: co to znaczy, że interfejs jest abstrakcyjną reprezentacją klasy? Czy to znaczy, że jest to deklaracja klasy, ale bez opisu wewnętrznych metod? Po co robić takie coś?
Po trzecie: Może jakiś przykład?

Pozdrawiam w.

Usunięty i przywrócony fragment o klasach abstrakcyjnych

[edytuj kod]

Cały fragment jest praktycznie nie na temat, a jego kluczowy fragment Jeśli w klasie abstrakcyjnej definiowane będą kolejne metody to może dojść do sytuacji, kiedy wszystkie ze zdefiniowanych metod klasy są metodami wirtualnymi - wówczas mamy już do czynienia z interfejsem jest zupełnie błędny. royas (dyskusja) 03:25, 29 maj 2012 (CEST)[odpowiedz]

Sam miałem poważne wątpliwości co do poprawności i związku z tematem w tym fragmencie, ale ostatecznie to zostawiłem, nie będąc w 100% pewnym. Cieszę się, że nie byłem odosobniony, dlatego teraz potwierdzam zdanie royasa. Interfejs to nie to samo, co klasa abstrakcyjna, w której wszystkie metody są wirtualne, choć technicznie może się w niektórych językach do tego sprowadzać. --Zyx (dyskusja) 17:52, 29 maj 2012 (CEST)[odpowiedz]

Hermetyzacja i dostęp do metod w interfejsach

[edytuj kod]
  • "Wszystkie zadeklarowane metody w interfejsie są publiczne, natomiast metody zadeklarowane w klasach mogą być publiczne lub chronione."


W nowszych wersjach Javy bodajże od wersji 8 albo 9 można stosować metody prywatne, domyślne i dowolne metody statyczne. 193.109.244.28 (dyskusja) 16:19, 9 lut 2025 (CET)[odpowiedz]