Arayüzler
Bir arayüz soyut sınıfların genelleştirilmesidir. Bir arayüz ile soyut sınıfın arasındaki en önemli fark şudur; arayüz içinde tanımlanmış tüm yöntemler soyut iken soyut sınıfı bazı yöntemleri bildirebilir ve gerçekleştirebilir. Bir arayüz içinde bildirilmiş yöntemler arayüzü gerçekleştiren (veya miras alan) sınıflar içinde gerçekleştirilmelidir.
Bir başka ayrım da şudur; bir sınıfın sadece bir süper sınıfı olabilirken, arayüzün tüm yöntemlerini gerçekleştirdiği sürece, herhangi bir sayıda arayüzü gerçekleştirebilir. Bu yüzden arayüzler birkaç çeşit kalıtım sağlayabilirler diyebilirz ki bu sınıflar için geçerli değildir.
Java dilinde bir arayüz basitçe interface anahtar kelimesi kullanılarak bildirilebilir. Aşağıdaki kod basit bir arayüzün bildirilmesini göstermektedir:
interface Cizilebilen{
	void draw();
};

						
Her sınıf gerçekleştirilecek arayüzü implements anahtar kelimesini kullanarak belirtebilir ve böylece arayüzün tüm yöntemlerini gerçekleştirmiş olur. Aşağıdaki örnekte Daire sınıfı Çizilebilen arayüzünü gerçekleştirir:
class Dikdortgen extends Sekil implements Cizilebilir{
	int radius;
	void scale(int scaleFactor){
		width *= scaleFactor;
		height *= scaleFactor;
	}
	void draw(){
		...
	}
}

						
Sınıflar gibi arayüzler de extends anahtar kelimesini kullanarak başka arayüzlerden miras alabilirler.Bir arayüz ayrıca aynı üye değişkenleri bildirebilirler. Bir arayüz içinde bildirilmiş tüm üye değişkenler bu arayüzü gerçekleştiren tüm sınıflar tarafından miras alınır. Fakat bir arayüz içinde bildirilmiş tüm üye değişkenler otomatik olarak static ve finaldır.