Java’da arayüzler (Interfaces), yapısal olarak soyut sınıflara benzemektedirler. Java’da arayüzler (Interfaces) ile soyut sınıflar arasındaki temel fark; soyut sınıflarda her metodu override etmek zorunda değildik. Java’da arayüzlerde ise tanımladığımız her metot, kullanılan sınıflarda mutlaka override edilmelidir. Java’da arayüzler, sınıfların bir görevi nasıl yapılacağını değil, görev yapılırken hangi adımları yapması gerektiğini belirtir.
Java’da Arayüzler’in (Interfaces) Avantajları
- Arayüzler aracılığıyla programda çoklu kalıtım uygulayabiliriz.
- Arayüzler, karmaşık tasarımları parçalama ve nesneler arasındaki bağımlılıkları temizleme işlevi görür.
- Arayüzler, uygulamayı gevşek bir şekilde birleştirir.
Java’da Arayüz (Interface) Genel Kullanım Yapısı
1 2 3 4 5 6 7 | //meyve bir arayüzdür. interface meyve { //soyut metotlar tanımladık. public void getTur(); public void getAd(); } |
Yaptığımız bu genel kullanım yapısında meyve arayüzü (Interface) oluşturduk. Bu arayüzümüzün içerisine soyut metotlar tanımladık.
Örneklerimize geçelim ve arayüzler (Interfaces) konumuzu pekiştirelim.
1. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | interface kitap { int syf = 189; //gosterilmesi için soyut metot oluşturduk void goster(); } //kitap arayuzunu implements eden bir sınıf olusturduk. class arayuz implements kitap { //arayüzün özellikleri uygulandı. @Override public void goster() { System.out.println("Fareler ve insanlar"); } public static void main (String [] args) { //nesnelerimizi oluşturduk arayuz arayuz1 = new arayuz(); arayuz1.goster(); System.out.println("Sayfa sayısı = " +syf); } } |
Ekran Çıktısı
1 2 | Fareler ve insanlar Sayfa sayısı =189 |
Yaptığımız bu örnekte ilk olarak kitap arayüzümüzü oluşturduk. Arayüzün içerisine değişken ve metot tanımladık. Kitap arayüzünü implement eden bir sınıf oluşturuyoruz ve bu sınıfın içerisine override işlemi yapılarak metodumuzu tanımlıyoruz. Sonrasında ise nesne oluşturarak ekran çıktımızın verilmesini sağlıyoruz.
2. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //interface oluşturduk. interface telefon { //soyut bir metot tanımladık void getmarka(String n); } //telefon arayuzunu implement eden bir sınıf olusturduk. class telefonmarka implements telefon { @Override public void getmarka(String n) { System.out.println("Telefon markası = "+n); } } //main sınıfımızı oluşturduk class main { public static void main(String [] args) { //nesnelerimizi oluşturduk Scanner scanner = new Scanner (System.in); telefonmarka telmarka = new telefonmarka(); //klavyeden veri girilmesini istedik System.out.println("Telefon markası giriniz"); String n = scanner.nextLine(); telmarka.getmarka(n); } } |
Ekran Çıktısı
1 2 3 | Telefon markası giriniz huawei Telefon markası = huawei |
Yaptığımız bu örnekte ilk olarak telefon arayüzü (Interface) oluşturduk. İçerisine bir metot tanımladık. Sonrasında ise telefonmarka sınıfı oluşturduk ve bu sınıfta telefon sınıfımızın uygulanmasını sağladık. Sonrasında ise main sınıfı oluşturduk ve bu sınıfta nesnelerimizi oluşturduk. Klavyeden veri isteyerek ekran çıktımızı vermiş olduk.
3. Örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | import java.util.Scanner; //arayüz (interface) oluşturduk. interface meyve { //metotlarımızı tanımladık void meyveadi(); void alınankg(double n); double fiyat (); } class cilek implements meyve { double n; double kgfiyat = 9.99; //meyve adını ekrana yazdıracak metot @Override public void meyveadi() { System.out.println("Çilek"); } //alınan kilogramı belirtecek metot @Override public void alınankg(double n) { this.n = n; } //fiyatımızı döndüren metot @Override public double fiyat() { return n*kgfiyat; } } class armut implements meyve { double n; double kgfiyat = 6.99; @Override //meyve adını ekran yazdıracak metot public void meyveadi() { System.out.println("Armut"); } //alınan kilogramı belirtecek metot @Override public void alınankg(double n) { this.n = n; } //fiyatımızı döndüren metot @Override public double fiyat() { return n*kgfiyat; } } class elma implements meyve { double n; double kgfiyat = 4.99; //meyve adını ekrana yazdıracak metot @Override public void meyveadi() { System.out.println("Elma"); } //girilen kilogramı belirtecek metot @Override public void alınankg(double n) { this.n = n; } //fiyatımızı döndürecek olan metot @Override public double fiyat() { return n*kgfiyat; } } class karpuz implements meyve { double n; double kgfiyat = 3.99; //meyve adımızı ekrana yazdıracak metot @Override public void meyveadi() { System.out.println("Karpuz"); } //girilen kilogramı belirtecek metot @Override public void alınankg(double n) { this.n = n; } //fiyatımızı döndürecek olan metot @Override public double fiyat() { return n*kgfiyat; } } //main sınıfımızı oluşturduk class main { public static void main(String [] args) { Scanner scanner = new Scanner(System.in); System.out.println("Çilek fiyat hesaplama için 1\n" + "Armut fiyatı hesaplamak için 2\n" + "Elma fiyatı hesaplamak için 3\n" + "Karpuz fiyatı hesaplamak için 4\n" + "'e basınız"); int y = scanner.nextInt(); //switch case kullandık ve hangi meyvenin seçileceği belirtildi switch(y) { case 1: double n; //nesnemizi oluşturduk cilek clk = new cilek(); //meyve adımızı yazdırdık clk.meyveadi(); System.out.println("Kaç kg çilek alındı?"); //girilecek olan kilogram belirtildi n = scanner.nextDouble(); //işlem yapılması için nesne içine kilogram yazıldı clk.alınankg(n); //ve ekran çıktımızı verdik. System.out.println("Çilek fiyat toplamı = " + clk.fiyat()); break; //diğer case'lerde de çilek meyvemizde yaptığımız işlemlerin aynı adımları yapılacak case 2: { armut arm = new armut(); arm.meyveadi(); System.out.println("Kaç kg armut alındı?"); n = scanner.nextDouble(); arm.alınankg(n); System.out.println("Armut fiyat toplamı = " + arm.fiyat()); break; } case 3: { elma elm = new elma(); elm.meyveadi(); System.out.println("Kaç kg elma alındı?"); n = scanner.nextDouble(); elm.alınankg(n); System.out.println("Elma fiyatı toplamı = " + elm.fiyat()); break; } case 4: { karpuz krp = new karpuz(); krp.meyveadi(); System.out.println("Kaç kg karpuz alındı?"); n=scanner.nextDouble(); krp.alınankg(n); System.out.println("Karpuz fiyatı toplamı = " + krp.fiyat()); } } } } |
Ekran Çıktısı
1 2 3 4 5 6 7 8 9 10 | Çilek fiyat hesaplama için 1 Armut fiyatı hesaplamak için 2 Elma fiyatı hesaplamak için 3 Karpuz fiyatı hesaplamak için 4 'e basınız 1 Çilek Kaç kg çilek alındı? 1,5 Çilek fiyat toplamı = 14.985 |
Yapmış olduğumuz bu örnekte ilk olarak meyve adında bir arayüz (Interface) oluşturduk ve içerisine diğer sınıflarımızın da kullanacağı metotlar tanımladık. Sonrasında ise bu arayüzün (Interface) içerisindeki metotları kullanacak olan sınıflarımızı belirttik. Bu sınıfların içerisine yapılacak olan işlemlerimizi tanımladık. Sonrasında ise main sınıfımızı oluşturduk. main sınıfımızın içerisinde nesnelerimiz oluşturduk ve işlemlerimizi gerçekleştirmiş olduk.