16 Implementing an Interface

Daha once degindigim gibi Java ‘da interface/arabirim bir kontrattir ve uygulayan siniflar (abstract olmadigi surece) bu kontrata uymak zorundadir yani metotlari uygulamak zorundadir.

interface ile abstract siniflarin en onemli farki sudur ; bir arabirim kalitim hiyerarsi onemli olmaksizin herhangi bir sinifta  uygulanabilir . Ornegin Runnable arabirimini birbiriyle hic alakasi olmayan siniflar ihtiyaci dogrultusunda uygulayip kullanabilir.
Bu arabirimin en onemli ve en guclu noktasidir.

Simdi bir arabirim/interface tanimlayalim ve incelemeye devam edelim ;

Speed.java

interface Speedy {
 void speedUp();
 void beCool();
}

Yukarida linkini verdigim yazida belirtigim gibi , interface/arabirimlerde sadece govdesiz metot yani abstract metot tanimlanabilir ve bu metotlar mutlaka publictir. Ee hani nerede abstract anahtar kelimesi Java bizim icin bunu halleder.

abstract ve public anahtar kelimelerinin yeri degisebilir, yukaridaki tanimlamayla su tanimlama aynidir.

interface Speedy {
 public abstract void speedUp();
 abstract public void beCool();
}

 

Vehicle.java

abstract public class Vehicle implements Speedy {

	abstract int goDirection();

	boolean haveEngine() {

		return true;
	}
}

Vehicle sinifimizda Speedy arabirimizi uyguladik / implements . Fakat Vehicle sinifimiz abstract oldugu icin Speedy interface/arabirimine ait olan metotlari override etmedik. Bir abstract sinif bir arabimiri uyguladiginda/implements , interface/arabirime ait metotlari override etmek zorunda degildir.

Car.java

public class Car extends Vehicle{

	@Override
	public void speedUp() {

	}

	@Override
	public void beCool() {

	}

	@Override
	int goDirection() {
		return 0;
	}

}

Abstract olmayan / concrete olan Car sinifimiz, Vehicle sinifini extends ettiginde override edilmeyen tum metotlari override etmek zorundadir. Yani Vehicle abstract sinifinda bulunan abstract metotlari ve Speedy interface/arabiriminde bulunan ve Vehicle abstract sinifi tarafindan override edilmeyen metotlari override etmek zorundadir.

Yani ilk abstract olmayan/ concrete sinif tum abstract metotlari mutlaka override etmelidir.

Car sinifi Vehicle sinifini kalitmakta ve Vehicle sinifi da Speedy arabirimini uygulamaktadir. Bu nedenle su tanimlamalar dogrudur ;

Car IS-A Vehicle
Car IS-A Speedy
Vehicle IS-A Speedy

Car sinifi aslinda Speedy sinifini implements etmektedir yani yukaridaki tanimladigimiz Car sinif tanimlamasi/declare su ifade ile aynidir.

public class Car extends Vehicle implements Speedy{
//
}
  • Bir sinif birden fazla interface/arabirimi uygulayabilir /implements.
  • Bir sinif sadece tek bir sinifi kalitabilir/extends.
  • Bir arabirim birden fazla arabirimi kalitabilir /extends.
  • Bir arabirim ne bir sinifi ne bir arabirimi uygulayabilir /implements.
  • Once extends anahtar kelimesi sonra implements anahtar kelimesi kullanilmalidir.
interface A {

}

interface B {

}

interface C extends A , B {

}
abstract class Ford implements Speedy extends Car{
// yanlis
}

abstract class Ford extends Car  implements Speedy {
//dogru
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*