java interface abstract class tutorial with examples
Bu eğitim videosu, Java Arayüzünün ne olduğunu, nasıl uygulanacağını ve Java'daki Arayüzleri kullanarak çoklu kalıtımı örneklerle açıklar:
Daha önceki derslerimizden birinde, soyutlamayı ayrıntılı olarak tartıştık. Orada soyut sınıfları ve soyut yöntemleri tartıştık. Soyut sınıfta soyut olmayan bir yönteme de sahip olabileceğimiz için soyut sınıfların soyutlama sağladığını biliyoruz.
Java'da% 100 soyutlama sağlayan özelliğe ' Arayüz ”. Bu eğitimde tartışacağız Java'da arayüzler.
=> Java Yeni Başlayanlar Kılavuzuna Bir Göz Atın.
Ne öğreneceksin:
- Arayüzler ve Soyut Sınıflar Üzerine Eğitim Videoları
- Java'da Arayüz Nedir
- Java'da Çoklu Arayüzler
- Sonuç
Arayüzler ve Soyut Sınıflar Üzerine Eğitim Videoları
Java'da Arayüzlere ve Soyut Sınıflara Giriş - Bölüm 1:
Java'da Arayüzlere ve Soyut Sınıflara Genel Bakış - Bölüm 2:
Java'da Soyutlama ve Kalıtım:
Java'da Arayüz Nedir
Java'da bir arabirim, sınıf davranışını belirleyen soyut bir tür olarak tanımlanır. Arayüz, belirli bir sınıfın nasıl davranması gerektiğine ilişkin kuralları belirleyen bir tür protokoldür.
Java'daki bir arayüz, soyut yöntemler ve statik sabitler içerebilir. Varsayılan olarak, arayüzdeki tüm yöntemler genel ve soyuttur.
Java'da bir arayüzün basit bir örneği aşağıda verilmiştir.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Yukarıdaki örnek, statik değişkeni ve soyut yöntemi olan 'calculateArea ()' olan bir 'şekil' arayüzünü tanımlar.
Arayüz, gövdesi olarak yalnızca soyut yöntemlere sahip bir varlıktır. Ayrıca içinde statik son değişkenler de olabilir.
Yani tıpkı sınıf gibi, bir arabirim de yöntemlere ve değişkenlere sahip olabilir, ancak yöntemlerin soyut (uygulama olmadan) ve değişkenlerin statik olduğunu unutmayın.
Aşağıda, Arayüzlerle ilgili akılda tutulması gereken bazı özellikler listelenmiştir:
- Arayüzler, bir sınıfın taslağıdır. Sınıfa kendi yöntemleriyle ne yapacaklarını söylerler.
- Bir arabirim soyut yöntemleri belirtir ve bu arabirimi uygulayan sınıflar da bu yöntemleri uygulamalıdır.
- Arabirimi uygulayan bir sınıf arabirimin tüm yöntemlerini tanımlamazsa, o sınıf soyut bir sınıf haline gelir.
Arayüz bildiriminin genel sözdizimi aşağıda verilmiştir.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Yukarıdaki açıklamada gösterildiği gibi, şu anda bir arayüz bildirdiğimizi belirten bir Java anahtar sözcüğü 'arabirimi' kullanıyoruz.
kalite kontrol ve kalite güvencesi arasındaki fark nedir
Bir 'arayüz' anahtar kelimesinin ardından arayüz_adı ve ardından açılış küme parantezleri gelir. Sonra çeşitli soyut yöntem bildirimlerimiz, statik alan bildirimlerimiz vb. Var. Son olarak, küme parantezlerini kapatıyoruz.
Örneğin,İçinde iki yöntem bulunan bir 'TestInterface' arabirimi, yani method_one ve method_two bildirmek istiyorsak, TestInterface beyanı aşağıdaki gibi olacaktır:
interface TestInterface{ void method_one(); void method_two(); }
Java'da Arayüzün Kullanımı
- Java'daki arayüzler, yalnızca soyut yöntemlere sahip olabildikleri için% 100 soyutlama sağlar.
- Arayüzleri kullanarak, Java'da sınıfları kullanarak mümkün olmayan çoklu kalıtım elde edebiliriz.
- Gevşek bağlantı elde etmek için bir arayüz kullanılabilir.
Java'da Arayüz Nasıl Uygulanır
Arayüz bildirildikten sonra, onu bir sınıfta kullanabiliriz 'uygular' anahtar kelimesini kullanma sınıf bildiriminde.
Bu 'uygular' anahtar kelimesi, aşağıda gösterildiği gibi sınıf adından sonra görünür:
class implements { //class body }
Arayüz uygulamak, bir sözleşme imzalamakla aynıdır. Bu nedenle, bir arayüz uygulayan bir sınıf, bir sözleşme imzaladığı ve arayüzün soyut yöntemlerini uygulamayı kabul ettiği veya başka bir deyişle arayüz tarafından belirtilen davranışı gerçekleştirdiği anlamına gelir.
Arabirimi uygulayan sınıf, arabirimde belirtilen davranışı tam olarak uygulamazsa, sınıfın soyut olarak bildirilmesi gerekir.
Arayüz Uygulama Örneği
Aşağıda Java'da bir arayüzün basit bir örneği verilmiştir.
//interface declaration interface Polygon_Shape { void calculateArea(int length, int breadth); } //implement the interface class Rectangle implements Polygon_Shape { //implement the interface method public void calculateArea(int length, int breadth) { System.out.println('The area of the rectangle is ' + (length * breadth)); } } class Main { public static void main(String() args) { Rectangle rect = new Rectangle(); //declare a class object rect.calculateArea(10, 20); //call the method } }
Çıktı:
Yukarıdaki program, Java'daki arayüzlerin basit bir örneğini göstermektedir. Burada Polygon_Shape adında bir arayüz tanımlıyoruz ve ardından Rectangle sınıfı onu uyguluyor.
Java'da Arayüz Adlandırma Kuralı
Java adlandırma kuralları, okunabilir tutarlı kodlar üretebilmemiz için programcılar olarak izlememiz gereken adlandırma yönergeleridir. Java, adlandırma sınıfları ve arayüzler için 'TitleCase' notasyonlarını kullanır. Değişkenler, yöntemler vb. İçin 'CamelCase' notasyonlarını kullanır.
Arayüz söz konusu olduğunda, arayüz adı başlık kasasındadır ve arayüz adının her kelimesinin ilk harfi büyük yazılır. Arayüz adları, genellikle sıfat olacak şekilde seçilir. Fakat arayüzler, harita veya liste gibi sınıfların ailesini temsil ettiğinde, isimlerden sonra adlandırılabilirler.
Aşağıda bazı geçerli arayüz adları örnekleri verilmiştir:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Arayüz Oluşturucu
Sonraki soru, bir arayüzün kurucuya sahip olup olmadığıdır?
Yöntemleri çağırmak için nesnelere ihtiyacımız olduğunu biliyoruz. Nesneler yaratmak için kuruculara ihtiyacımız var. Ancak Java'daki Arayüzler söz konusu olduğunda yöntemler uygulanmaz.
Arayüz yöntemlerinin tamamı soyuttur. Dolayısıyla bu yöntemleri arayüzden çağırmanın bir faydası yoktur. İkinci olarak, arayüzler varsayılan olarak soyut olduğundan, arayüzün nesnelerini yaratamayız. Dolayısıyla Interface için kuruculara ihtiyacımız yok.
Arayüz Yöntemleri
Bu bölümde, arayüz yöntemlerinin nasıl beyan edileceğini tartışacağız. Kural olarak, bir arabirim yalnızca genel yöntemlere sahip olabilir veya varsayılan olarak arabirim yöntemleri geneldir. Arabirim içinde başka hiçbir erişim değiştiricinin kullanılmasına izin verilmez.
Dolayısıyla, açıkça beyan etsek de etmesek de, arayüzdeki her yöntem varsayılan olarak genel görünürlüğe sahip soyuttur.
Dolayısıyla, bir arayüzde bildirmeyi planladığımız prototip void printMethod () ise, aşağıdaki bildirimler aynıdır.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Arayüz yöntemleri için arayüz içinde aşağıdaki değiştiricileri kullanamayacağımızı unutmayın.
- final
- statik
- Özel
- korumalı
- senkronize
- yerli
- katıfp
Şimdi arayüz yöntemi görünürlüğünü göstermek için bir Java programı uygulayalım.
//declare an interface interface TestInterface { void printMethod(); //default visibility is public. } //interface implementation class TestClass implements TestInterface { //if the access modifier is changed to any other, compiler generates error public void printMethod() { System.out.println('TestClass::printMethod()'); } } class Main { public static void main(String() args) { TestClass tc = new TestClass(); //create an object tc.printMethod(); //call concrete method } }
Çıktı:
Daha önce de belirtildiği gibi, varsayılan olarak arayüz yöntemleri herkese açıktır. Dolayısıyla, arayüz yöntemi için herhangi bir erişim değiştiricisi belirtmediğimizde, yukarıdaki programda olduğu gibi geneldir.
Yukarıdaki programdaki arayüz yöntemi bildirimini aşağıdaki gibi değiştirdiğimizi varsayalım:
özel void printMethod ();
Bu, printMethod () arayüz yöntemini özel olarak belirlediğimiz anlamına gelir. Programı derlediğimizde aşağıdaki derleyici hatası alıyoruz.
hata: özel değiştiriciye burada izin verilmez
özel void printMethod ();
Test edebileceğimiz ikinci durum, TestClass sınıfındaki uygulanan yöntemin değiştiricisini public'ten özele değiştirmektir. Artık sınıftaki varsayılan değiştirici özeldir. Bu nedenle, public anahtar kelimesini sınıftaki yöntem prototipinden aşağıdaki gibi kaldırıyoruz:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Şimdi programı derlersek aşağıdaki hatayı alıyoruz.
hata: TestClass içindeki printMethod (), TestInterface içinde printMethod () uygulayamıyor
void printMethod ()
^
daha zayıf erişim ayrıcalıkları atamaya çalışmak; halka açıktı
Bu nedenle burada dikkat edilmesi gereken nokta, arayüzün uygulanan yönteminin erişim değiştiricisini başka herhangi bir erişim değiştiriciyle değiştiremeyeceğimizdir. Arabirim yöntemleri varsayılan olarak genel olduğundan, arabirimleri uygulayan sınıflar tarafından uygulandıklarında, bu yöntemler de genel olmalıdır.
Java'da Arayüz Alanları
Bir arayüzde bildirilen alanlar veya değişkenler varsayılan olarak public, static ve final'dir. Bu, bir kez beyan edildikten sonra değerinin değiştirilemeyeceği anlamına gelir.
Arayüz alanları bu değiştiricilerden herhangi biri belirtilmeden tanımlanırsa, Java derleyicilerinin bu değiştiricileri üstlendiğine dikkat edin. Örneğin, Arayüzdeki alanı bildirirken bir genel değiştirici belirtmezsek, varsayılan olarak varsayılır.
Bir arayüz bir sınıf tarafından uygulandığında, arayüzün tüm soyut yöntemleri için bir uygulama sağlar. Benzer şekilde, arayüzde bildirilen tüm alanlar da arayüzü uygulayan sınıf tarafından miras alınır. Dolayısıyla, uygulama sınıfında arayüz alanının bir kopyası mevcuttur.
Artık arayüzdeki tüm alanlar varsayılan olarak statiktir. Dolayısıyla, nesneyi değil, sınıf adını kullanarak sınıfın statik alanlarına eriştiğimiz gibi, arayüz adını doğrudan kullanarak onlara erişebiliriz.
Aşağıdaki örnek Java programı arayüz alanlarına nasıl erişebileceğimizi göstermektedir.
//interface declaration interface TestInterface{ public static int value = 100; //interface field public void display(); } //Interface implementation class TestClass implements TestInterface{ public static int value = 5000; //class fields public void display() { System.out.println('TestClass::display () method'); } public void show() { System.out.println('TestClass::show () method'); } } public class Main{ public static void main(String args()) { TestClass testObj = new TestClass(); //print interface and class field values. System.out.println('Value of the interface variable (value): '+TestInterface.value); System.out.println('Value of the class variable (value): '+testObj.value); } }
Çıktı:
Yukarıdaki programda gösterildiği gibi, arayüz alanlarına bir Arayüz adı, ardından nokta operatörü (.) Ve ardından gerçek değişken veya alan adı kullanılarak erişilebilir.
Java'da Genel Arayüz
Java jeneriklerini daha önceki eğitimlerimizde tartışmıştık. Genel sınıflara, yöntemlere vb. Sahip olmanın yanı sıra, genel arayüzlere de sahip olabiliriz. Genel arayüzler, genel sınıfları belirlediğimiz şekilde benzer şekilde belirtilebilir.
Genel arabirimler, onları bir veri türünden bağımsız kılan tür parametreleriyle bildirilir.
Genel arayüzün genel sözdizimi aşağıdaki gibidir:
qtp mülakat soruları ve cevapları 4 yıldır deneyimli
interface { //interface methods and variables }
Şimdi, yukarıdaki genel arayüzü bir sınıfta kullanmak istiyorsak, aşağıda gösterildiği gibi sınıf tanımı:
class implements interface_name { //class body }
Arayüzde olduğu gibi sınıfla aynı parametre listesini belirtmemiz gerektiğine dikkat edin.
Aşağıdaki Java programı, Java'daki Genel Arayüzleri göstermektedir.
//generic interface declaration interface MinInterface>{ T minValue(); } //implementation for generic interface class MinClassImpl> implements MinInterface { T() intArray; MinClassImpl(T() o) { intArray = o; } public T minValue() { T v = intArray(0); for (int i = 1; i intMinValue = new MinClassImpl (intArray); MinClassImpl charMinValue = new MinClassImpl(charArray); //call interface method minValue for int type array System.out.println('Min value in intOfArray: ' + intMinValue.minValue()); //call interface method minValue for char type array System.out.println('Min value in charOfArray: ' + charMinValue.minValue()); }
Çıktı:
Yukarıdaki program, dizideki minimum değeri bulmak için bir yöntem içeren bir arayüz uygular. Bu genel bir arayüzdür. Sınıf bu arabirimi uygular ve yöntemi geçersiz kılar. Ana yöntemde, bir tamsayı ve bir karakter dizisindeki minimum değeri bulmak için arabirim yöntemini çağırıyoruz.
Java'da Çoklu Arayüzler
Kalıtım konumuzda, Java'nın bir sınıfın birden fazla sınıftan miras almasına izin vermediğini gördük, çünkü bu 'Elmas Problemi' olarak adlandırılan bir belirsizliğe neden oluyor.
Ancak, bir sınıf birden fazla arabirimi devralabilir veya uygulayabilir. Bu durumda, çoklu miras olarak bilinir. Dolayısıyla, Java'da sınıflar aracılığıyla çoklu kalıtım uygulamamıza izin verilmese de, bunu arayüzleri kullanarak yapabiliriz.
Aşağıdaki diyagram, arayüzleri kullanan çoklu kalıtımı göstermektedir. Burada bir sınıf, Interface_one ve Interface_two gibi iki arayüz uygular.
Bir sınıf birden çok arabirimi uyguladığında, arabirim adlarının sınıf bildiriminde virgülle ayrıldığını unutmayın. Karmaşıklıkla başa çıkabildiğimiz sürece çok sayıda arayüz uygulayabiliriz.
Birden çok arabirimi gösteren Java programı aşağıda gösterilmiştir.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration interface Interface_Two{ void show(); } //multiple inheritance - DemoClass implementing Interface_One&Interface_Two class DemoClass implements Interface_One,Interface_Two{ public void print(){ //Override Interface_One print() System.out.println('Democlass::Interface_One_Print ()'); } public void show(){ //Override Interface_Two show() System.out.println('DemoClass::Interface_Two_Show ()'); } } public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Çıktı:
Java'da dizi öğesi nasıl kaldırılır
Yukarıda gösterildiği gibi, iki arayüz uyguluyoruz. Sonra onların ilgili yöntemlerini geçersiz kılar ve ana yöntemde çağırırız.
Java'da çoklu kalıtım, C ++ 'da çoklu kalıtımın sağladığı tüm avantajları sağlar. Ancak sınıfları kullanan çoklu kalıtımın aksine, arayüzleri kullanan çoklu kalıtım herhangi bir belirsizlik içermez.
Java'da Arayüz Kalıtımı: Arayüz Arayüzü Genişletiyor
Bir sınıf bir arayüz uyguladığında, ' uygular ’Anahtar kelimesi. Java'da, bir arabirim başka bir arabirimi devralabilir. Bu, ‘ genişler ’Anahtar kelimesi. Bir arabirim başka bir arabirimi genişlettiğinde buna ' Arayüz kalıtımı Java'da '.
Arayüz kalıtımını uygulamaya yönelik Java programı aşağıda gösterilmiştir.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration; inherits from Interface_One interface Interface_Two extends Interface_One{ void show(); } //multiple inheritance - DemoClass implementing Interface_Two class DemoClass implements Interface_Two{ public void print(){ //Override Interface_Two print() System.out.println('Democlass public class Main{ public static void main(String args()){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Çıktı:
Arayüz kalıtımını göstermek için arayüzler kullanarak çoklu kalıtım için kullandığımız aynı programı değiştirdik. Burada, Interface_two'da Interface_one'u genişletiyoruz ve sonra bir sınıfta Interface_two uygulamaya geçiyoruz. Arayüzler miras alındığı için, her iki yöntem de geçersiz kılma için kullanılabilir.
Sıkça Sorulan Sorular
S # 1) Java'da Arayüzün kullanımı nedir?
Cevap: Java'da bir arayüz,% 100 soyutlama elde etmek için kullanılan bir varlıktır. Arabirimi uygulayan sınıf tarafından geçersiz kılınabilen yalnızca soyut yöntemler içerebilir.
Arayüz bir bakıma sınıfın bir planı gibi davranır, burada sınıfa soyut yöntem prototiplerini ve statik sabitleri sağlar ve daha sonra sınıf, arayüzü uygulayarak bu yöntemleri geçersiz kılmak zorundadır.
S # 2) Java'da Arayüzün avantajları nelerdir?
Cevap: Arayüzün avantajlarından bazıları aşağıdaki gibidir:
- Arayüz, sınıfın bir taslağı görevi görür.
- Arayüz, tüm soyut yöntemlere sahip olduğu için Java'da% 100 soyutlama sağlar.
- Arayüzler, Java'da çoklu miras elde etmek için kullanılabilir. Java, birden fazla sınıftan miras almaya izin vermez, ancak bir sınıf birden çok arabirim uygulayabilir.
# 3) Bir arayüzün yöntemleri olabilir mi?
Cevap: Arabirimler, yöntem prototiplerine ve statik ve son sabitlere sahip olabilir. Ancak Java 8'den başlayarak, arayüzler statik ve varsayılan yöntemler içerebilir.
S # 4) Arayüzü nihai olarak ilan edebilir miyiz?
Cevap: Hayır. Bir arayüzü nihai olarak ilan edersek, sınıf onu uygulayamayacaktır. Herhangi bir sınıf tarafından uygulanmadan arayüz herhangi bir amaca hizmet etmeyecektir.
Arayüzler Hakkında Daha Fazla Bilgi
Arabirimler, sınıf gibi taslaklardır, ancak yalnızca yöntem bildirimine sahip olacaktır. Herhangi bir uygulama yöntemi olmayacak. Arayüzdeki tüm yöntemler varsayılan olarak genel soyuttur. Java 1.8 arayüzü statik ve varsayılan yöntemlere sahip olabilir.
Arayüzler genellikle API'lerde kullanılır.
Örneğin: Bir aracın motorunu tasarladığınızı düşünün.
Donanım kısmıyla işiniz bittiğinde, bazı yazılım işlevlerinin motorunuzu kullanan bir istemci tarafından uygulanmasını istersiniz. Bu durumda, motor işlevlerinizi bir arayüzde tanımlayabilirsiniz.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Arayüz için uyulması gereken kurallar
- Arabirimi uygulayan sınıf, arabirimdeki tüm yöntemleri uygulamalıdır.
- Bir arayüz, son değişkenleri içerebilir.
public class Vehicle implements Engine { int speed; int gear; @Override public void speedUp(int a) { this.speed=a; System.out.println('speed'+speed); } @Override public void changeGear(int a) { this.gear=a; System.out.println('gear'+gear); } public static void main(String() args) { // TODO Auto-generated method stub Vehicle objv=new Vehicle(); objv.changeGear(3); objv.speedUp(70); } }
Burada Araç sınıfı, motor arayüzünü uygulayan alt sınıftır.
Soyut Sınıflar nelerdir?
Soyut bir sınıf bir sınıfa benzer ancak soyut yöntemleri ve somut yöntemleri olacaktır. Soyut yöntemlerin bir uygulaması yoktur. Yalnızca yöntem bildirimine sahip olacaktır.
Soyut Ders için Uyulması Gereken Kurallar
- Soyut sınıf somutlaştırılamaz.
- Soyut sınıfı genişleten alt sınıf, ana sınıfın tüm soyut yöntemlerini uygulamalı veya Çocuk sınıfı soyut bir sınıf olarak bildirilmelidir.
Kısmi uygulama tasarlamak istediğinizde, soyut bir sınıfa gidebilirsiniz.
Örnek soyut sınıf programı:
EmployeeDetails.java
public abstract class EmployeeDetails { private String name; private int emp_ID; public void commonEmpDetaills() { System.out.println('Name'+name); System.out.println('emp_ID'+emp_ID); } public abstract void confidentialDetails(int s,String p); }
Soyut sınıfı genişletecek sınıf.
HR.java
public class HR extends EmployeeDetails { private int salary; private String performance; @Override public void confidentialDetails(int s,String p) { this.salary=s; this.performance=p; System.out.println('salary=='+salary); System.out.println('performance=='+performance); } public static void main(String() args) { HR hr =new HR(); hr.confidentialDetails(5000,'good'); } }
Dikkat edilmesi gereken kilit noktalar:
- Arayüzlerde, tüm yöntemlerin yöntem uygulaması olmayacaktır.
- Arayüzü uygulayan sınıf, o belirli arayüzdeki tüm yöntemleri uygulamalıdır.
- Soyut sınıflar, normal somut yöntemlerin yanı sıra soyut yöntemlere de sahip olabilir. Soyut yöntemlerin bir uygulaması yoktur.
- Soyut sınıfı genişleten sınıf, soyut sınıftaki tüm soyut yöntemler için uygulamaya sahip olmalıdır.
- Alt sınıf, soyut yöntemleri uygulamak için yeterli bilgiye sahip değilse, alt sınıfın soyut bir sınıf olarak bildirilmesi gerekir.
Sonuç
Bu eğitimde, Java'daki arayüzlerin temel kavramlarını sunduk. Arayüz ihtiyacının yanı sıra arayüzün tanımını tartıştık. Temel sözdizimini ve tanımlarını araştırdık. Daha sonra, 'uygular' anahtar kelimesini kullandığımız arayüzleri nasıl kullanacağımızı tartıştık.
Java'da çoklu arayüzlerin ve arayüz kalıtımının nasıl kullanılacağını öğrendik. Birden çok arabirim kullanarak, Java'da birden çok kalıtım uygulayabiliriz. Arayüz kalıtımı, bir arayüzün başka bir arayüzü genişletmesidir.
=> Java Eğitim Serisini Herkes İçin Görmek İçin Burayı Ziyaret Edin
Önerilen Kaynaklar
- OOP Java: Java'da Nesne Tabanlı Programlamaya Giriş
- Java'da Karşılaştırılabilir ve Karşılaştırıcı Arayüzler
- Java 8'de Arayüz Geliştirmeleri - Java İşlevsel Arayüzü
- Uygulama ve Örneklerle Java Harita Arayüzü Eğitimi
- Java'da ListIterator Arayüzü Örneklerle
- Java'da Marker Arayüzü: Serileştirilebilir ve Klonlanabilir
- Java'da Arabirimi Ayarlayın: Örneklerle Java Seti Eğitimi
- Örneklerle Java Yansıtma Eğitimi