Java'da birden fazla miras nedir?

Geliştiriciler, Java'yı başlangıçtan tam ve nesne tabanlı bir programlama dili olarak tasarladılar.

OOP ve kalıtım

Nesne yönelimli programlamanın kullanılması, nesnelerin işlevselliğini genişletmek için kalıtım kavramını kullanır. Bir programcı bir nesne oluşturduğunda düşünün. Daha sonra, sadece küçük farklarla çok benzer bir nesne oluşturmanız gerektiğini görebilirsiniz (belki de yeni bir bağlamda daha önceki bir nesnenin işlevselliğini genişletir). Mirasın ortaya çıktığı yer burası. Bir programcının "başka bir" temel "nesneden" türediği "bir nesne, sınıfın yöntemlerini ve değişkenlerini miras alır ve daha fazla işlevsellik ekleyebilir (aşağıdaki Java örneğinde olduğu gibi):

kamu sınıfı Sphere {public int radius; }

kamu sınıfı Ball Sphere {public string color; // Ball "color" değişkenini ekler, ancak "radius" değişkenini de kullanır.

Çoklu kalıtım

Bir noktada, bir programcı birkaç sınıfın tek bir sınıfını türetmek için cazip olabilir. Bu "çoklu kalıtım" olarak bilinir ve yararlı görünmesine rağmen, önemli "elmas sorunu" gibi sorunlara neden olabilir. Bu sorun, iki sınıf aynı sınıftan miras alırken (B sınıfı ve C sınıfı, A sınıfından türetilir), diğer bir sınıf ise (D) B ve C'den türetilir. Bir D nesnesi oluşturulduğunda, sistem bunu bir taban sınıfı türü (örneğin "Top" veya top ve "Küre" veya küre). Elmas probleminde, sistem hangi D sınıfını belirleyemediğini (ABD tipi mi yoksa ACD tipi mi?) Soruna neden olan şeydir.

Java ve çoklu kalıtım

Çoklu kalıtım sorunları nedeniyle, Java buna izin vermez. Ancak gerçekte, birkaç temel sınıftan türetilen sınıflar, "arayüzler" kullanılarak güvenli bir şekilde sağlanabilir. Bir arayüz bir sınıfa benzer, ancak sadece sınıfın yapısını değil, aynı zamanda gerçek kodunu da tanımlar. Bir arabirimi uygulayan bir temel sınıf, arabirimin işlevselliğini "devralmaz": yalnızca yapısının kullanımını vaat eder. Bir arabirimi uygulayan bir sınıf başka bir sınıftan miras almadığından (ve temel sınıfın bir türü olmadığından), bir programcı aynı sınıfı kullanarak çeşitli arabirimleri uygulayabilir.

Örnek: Kalıtım ve arabirimler

Aşağıdaki örnek, nesnelerin kalıtımı ve bir arabirim arasındaki farkı gösterir. Bir başkasından miras alan bir sınıf temel sınıfa erişir çünkü temelde bu sınıfın bir türü olur ("Top" ve "Sphere" sınıflarında olduğu gibi). Bir arabirimi uygulayan bir sınıf, yalnızca arabiriminin yapısını uygulamak için söz verir: bu arabirimin bir türü değildir:

arayüz Basic {int doubleA (); // not: arayüzde gerçek bir kod tanımlanmamıştır}

public class B Basic'i uygular {

public int a;

public int doubleA () // class B, "Basic" {return a * 2;}} uygulamak için "doubleA ()" yöntemini tanımlamalıdır.