Java, nesne yönelimli programlamanın (OOP) dört ana prensibini uygular: kapsülleme, miras, çok biçimlilik ve soyutlama.
private, protected, public) ve getter/setter'ları kullanır.public class Account { private double balance; public double getBalance() { return balance; } public void deposit(double amount) { this.balance += amount; } }
extends anahtar kelimesiyle gerçekleştirilir. Bu, kodun yeniden kullanımını teşvik eder.public class Animal {} public class Dog extends Animal {}
Animal animal = new Dog(); animal.makeSound(); // Dog içindeki uygulamayı çağırır
public interface Drawable { void draw(); }
Java'da bir sınıf, aynı imzaya sahip bir arayüzü ve soyut bir sınıfı miras alıyorsa ne olur? Miras alınan sınıfın davranışı nasıl olur?
Cevap: Eğer hem soyut sınıf hem de arayüz aynı yöntem imzasını tanımlıyorsa, bu yöntemi türetilmiş sınıfta yalnızca bir kez uygulamak yeterlidir. Ancak eğer soyut sınıf bu yöntemi uygulamışsa, Java onun uygulamasını kullanır. Arayüzün varsayılan yöntemleri sadece gerekiyorsa geçersiz kılınır.
interface A { default void foo() { System.out.println("A"); }} abstract class B { void foo() { System.out.println("B"); }} class C extends B implements A {} // new C().foo() "B" yazdırır
Hikaye
Bir banka projesinde, geliştirici tüm alanları
publicyaptı ve onlara doğrudan erişti. Bu, nesnelerin durumunun kontrolsüz bir şekilde değişmesine ve hataların zor bulunmasına yol açtı. Sonuç olarak, tüm kodun private alanlar ve erişim yöntemlerini kullanacak şekilde yeniden yazılması gerekti.
Hikaye
Yeni çalışanlardan biri, çok biçimliliği desteklediğini düşünerek temel sınıfın private yöntemini geçersiz kılmaya çalıştı. Ancak bu, alt sınıfta yeni bir yöntem oluşturdu ve temel sınıftan yapılan çağrılar orijinal versiyonu çağırarak beklenmeyen davranışlara yol açtı.
Hikaye
Birden fazla kaynaktan varsayılan yöntemler içeren arayüzlerin kullanımı, "class X inherits unrelated defaults for Y() from types A and B" hatasına yol açtı — çalışan, bu tür çatışmaların alt sınıfta manuel olarak çözülmesi gerektiğini bilmiyordu.