Bu makale boyunca, Java Nesneye Yönelik Programlama Kavramı hakkında sık sorulan mülakat sorularını tartışıyoruz.
Arayüz yalnızca soyut yöntemlere sahip olabilir. Soyut bir sınıf, soyut ve soyut olmayan yöntemlere sahip olabilir. Bu ifade yalnızca Java 8 sürümünden önce geçerlidir . Java 8'den sonra, arayüzde varsayılan veya statik yöntem şeklinde somut yöntemler uygulayabilmektedir .
Bir Java arayüzünde bildirilen değişkenler varsayılan olarak nihaidir. Soyut bir sınıf, nihai olmayan değişkenler içerebilir . Soyut sınıf, son, son olmayan, statik ve statik olmayan değişkenlere sahip olabilir. Arayüzde yalnızca statik ve son değişkenler bulunur.
Yukarıdaki örnekte, sadece bildirirseniz arayüzde
int number = 10. Java
public,
staticve
finaldeğişken ile ekler . Arayüz adını (
InterfaceExample.number) kullanarak bu değişkene doğrudan erişebilmeniz için . Ayrıca arayüz, dışında herhangi bir erişim değiştiriciye izin vermez.
public.
Bir Java arayüzü " uygular " anahtar sözcüğü kullanılarak uygulanabilir ve soyut sınıf, " extends " anahtar sözcüğü kullanılarak genişletilebilir .
Bir arabirim yalnızca başka bir Java arabirimini genişletebilir, soyut bir sınıf başka bir Java sınıfını genişletebilir ve birden çok Java arabirimi uygulayabilir.
Java arayüzünün üyeleri varsayılan olarak geneldir. Bir Java soyut sınıfının özel, korumalı vb. Gibi sınıf üyeleri olabilir.
Java 8'den önce diyebiliriz ki, bir arayüzün somut metotları olamaz ve soyut sınıf ile arayüz arasındaki temel fark buydu ama şimdi durum böyle değil.
Soyut sınıflar sınıflardır , bu nedenle Java'daki arayüzün diğer kısıtlamalarıyla sınırlı değildirler. Bu araçlar soyut sınıf olabilir devlet , ancak Java arayüzünde devlet olmaz.
Varsayılan yöntemlere sahip bir arabirim ile soyut sınıf arasındaki diğer bir anlamsal fark, soyut bir sınıf içinde oluşturucular tanımlayabilmeniz , ancak Java'da bir arabirim içinde bir kurucu tanımlayamamanızdır.
Gerçekte, geriye dönük uyumluluğu korumak için varsayılan yöntemler tanıtıldı ve aynı zamanda Koleksiyon API'sini lambda ifadeleri gibi temel Java 8 özelliklerinde kullanılmaya daha uygun hale getirdi.
Prosedürel programlama başka bir programlama paradigmasıdır. Prosedürel programlamada, bir program, yöntemler adı verilen daha küçük parçalara bölünür . Bu yöntemler, bu teknikte kullanılan temel öğelerdir. Prosedürel programlama tekniğinin odak noktası, kodun yeniden kullanılabilirliği için yöntemler kullanmaktır.
Nesne Tabanlı Programlama, prosedürel programlamaya göre aşağıdaki avantajlara sahiptir:
Bir alanı halka açık hale getirme ile alıcılar / ayarlayıcılar yoluyla açığa çıkarma arasındaki temel fark, mülk üzerindeki kontrolü elinde tutmaktır . Bir alanı herkese açık hale getirirseniz, arayan kişiye doğrudan erişim sağladığınız anlamına gelir. Ardından, arayan kişi bilerek veya bilmeyerek alanınızla her şeyi yapabilir. Örneğin, bir alan boş bir değere ayarlanabilir ve bu alanı başka bir yöntemde kullanırsanız, bu yöntemi bir boş işaretçi istisnası ile patlatabilir.
Ancak, bir alıcı / ayarlayıcı sağlarsanız, tam kontrolü ele alırken onlara dolaylı erişim sağlarsınız. Bir değer belirlemenin tek yolu bir ayarlayıcıdır ve alıcı aracılığıyla bir değer elde edersiniz, bu nedenle artık alanınız için tam olarak bir giriş ve bir çıkış noktanız vardır, çünkü alıcı / ayarlayıcılar, kod bloklarına izin veren yöntemlerdir. onlar üzerinde doğrulama kontrolleri yapabilirsiniz! Nesne, arayan değerini belirlemeniz gerekip gerekmediğine karar verir. Aynısı bir alıcı yöntemi için de geçerlidir - asıl referansı iade etme veya onu klonlama ve bunu arayana iade etme kararını verebilirsiniz.
Tek Kalıtım : Bir sınıfın başka bir sınıfı genişlettiği alt ve üst sınıf ilişkisini ifade eder.
Çok düzeyli kalıtım : Bir sınıfın alt sınıfı genişlettiği bir alt ve üst sınıf ilişkisini ifade eder. Örneğin, A sınıfı B sınıfını ve B sınıfı C sınıfını genişletir.
Hiyerarşik miras : birden fazla sınıfın aynı sınıfı genişlettiği bir alt ve üst sınıf ilişkisini ifade eder. Örneğin, B sınıfı A sınıfını ve C sınıfı A sınıfını genişletir.
Çoklu Kalıtım : Bir sınıfın birden fazla sınıfı genişletmesi kavramını ifade eder; bu, bir alt sınıfın iki ebeveyn sınıfa sahip olduğu anlamına gelir. Java, çoklu kalıtımı desteklemez.
Small Talk, Java, C # gibi yeni OO dillerinin çoğu Çoklu kalıtımı desteklemez. Çoklu Devralma, C ++ 'da desteklenir.
Çoklu Kalıtım, bir sınıfın birden fazla ana sınıfın özelliklerini devralabildiği, nesne yönelimli kavramın bir özelliğidir. Java, çoklu kalıtımı desteklemez. Bu, bir sınıfın birden fazla sınıfı genişletemeyeceği anlamına gelir. Bu nedenle, aşağıdakiler yasa dışıdır
public class Tomatto extends Vegitable, Fruit{}
Java'nın çoklu kalıtıma izin verdiğini varsayın. O zaman aşağıdaki örneğe gidin.
Yukarıdaki örnekte, sınıfı ve sınıfları
Tomato tarafından genişletildiğini görebilirsiniz . Domates hem üst sınıfları içerir sınıfı gibi özellikleri yüzden ve bunun Domates yöntemin kullanılması () metodu aradığını (Domates sınıf içinde) ana sınıfta. Peki hangi use () yöntemini çağırması gerekir? nesneler yöntemi mi yoksa nesne yöntemi mi? Java üzerinde yapılan bir kafa karışıklığı var. Buna elmas problemi denir.
Fruit
Vegetable
Fruit
Vegitable.
Fruit
use()
Vegitable
use()
Bu nedenle, bu tür karışıklıklardan kaçınmak için Java, sınıfların çoklu kalıtımını desteklemez.
Çoklu kalıtımın java tarafından desteklenmemesinin ikinci nedeni, çok karmaşık olmasıdır. Döküm, yapıcı zincirleme vb. Gibi çeşitli işlemler sırasında sorun yaratır ve her şeyden önce, aslında çoklu mirasa ihtiyaç duyduğumuz çok az sayıda senaryo vardır, bu yüzden işleri basit ve anlaşılır tutmak için onu atlamak daha iyidir.
Birleştirme, bir öğenin diğerine sahip olduğu doğrudan bilgi derecesini ifade eder. Başka bir deyişle, A sınıfındaki değişiklikler, B sınıfındaki değişiklikleri ne sıklıkla zorlar.
Genel olarak, sıkı bağlantı, iki sınıfın sıklıkla birlikte değiştiği anlamına gelir. Başka bir deyişle, A, B'nin uygulanma şekli hakkında olması gerekenden fazlasını biliyorsa, o zaman A ve B sıkı bir şekilde birleştirilir.
Bir örnekle detaylı olarak anlatacağım.
Yukarıdaki örnekte,
Circle nesnenin ve
DrawShape nesnenin birbirine sıkıca bağlı olduğunu görebilirsiniz. Çünkü
Circle nesnedeki nesne uygulamasını
DrawShape başka bir nesneyle değiştirirsem
Rectangle.
DrawShape Değişikliğin bir parçası olarak kodu sınıfta yeniden yazmam gerekiyor .
Circle Nesne oluşturma kodunu
Rectangle nesne oluşturma ile değiştirmem gerekiyor . Ayrıca, ilgili
startDrawing yöntem uygulamasını değiştirmem gerekiyor .
Rectangle
Basit bir deyişle, gevşek bağlantı, nesnelerin çoğunlukla bağımsız olduğu anlamına gelir . A sınıfının B sınıfı bağımlılığa ihtiyaç duyduğu tek bilgi, B sınıfının arayüzü aracılığıyla ortaya çıkardığı bilgiyse, A sınıfı ve B sınıfının gevşek bir şekilde bağlandığı söylenir. Nesneler arasındaki sıkı bağlantı sorunlarının üstesinden gelmek için yay çerçevesi, POJO / POJI modeli yardımıyla bağımlılık enjeksiyon mekanizmasını kullanır ve bağımlılık enjeksiyonu ile gevşek bağlantı elde etmek mümkündür.
Yukarıdaki örneğin tasarımını biraz değiştirelim ve gevşek bağlı yapalım.
Burada
DrawShape sınıfta,
shape değişken başlatmayı değiştirirseniz,
Rectangledikdörtgen için çalışır. Dikdörtgenin bir parçası olarak daire nesnesine geçiş yapmak için çok fazla kod değiştirmenize gerek yok, yani yukarıdaki kodun gevşek bir şekilde bağlı olduğunu söyleyebiliriz.
Hayır, soyut bir yöntemi senkronize, nihai veya statik yapmak mümkün değildir.
nihai ve soyut, doğada tamamen zıttır. Son bir sınıf veya yöntem, soyut bir sınıf veya yöntemin daha fazla değiştirilmesi gerektiğinde daha fazla değiştirilemez. " Final" anahtar sözcüğü, bir sınıfın veya yöntemin daha fazla iyileştirmeye ihtiyaç duymadığını belirtmek için kullanılır. "Soyut" anahtar sözcüğü, bir sınıfın veya yöntemin daha fazla iyileştirmeye ihtiyaç duyduğunu belirtmek için kullanılır.
soyut yöntemler senkronize olarak bildirilemez. Ancak soyut yöntemleri geçersiz kılan yöntemler, senkronize edilmiş olarak bildirilebilir .
Soyut yöntemler özel olamaz. Soyut yöntemlerin özel olmasına izin verilirse, alt sınıfa miras alınmayacak ve geliştirilmeyecektir.
Teknoloji dünyasında, işletmeler sürekli olarak siber suçluların şeytani faaliyetlerinin tuzağına düşme riski altındadır. Endişe verici derecede sık hale gelen böyle bir taktik, kimlik bilgilerini doldurmaktır.
Modern veri bulutunun içinde ve sırada ne var? Veri adası sorunları ve ilk 8 trend Prelude Data Cloud uçsuz bucaksız bir alemdir.
Yapay Zekaya Giriş Yapay Zeka (AI), endüstrilerde devrim yaratma, yaşama ve çalışma şeklimizi değiştirme ve topluma sayısız fayda sağlama potansiyeline sahip, hızla gelişen bir teknolojidir. Ancak, her yeni teknolojide olduğu gibi, dikkate alınması gereken etik hususlar da vardır.
Nihayet! 2022 En İyi Yeni Müziklerime hoş geldiniz. Bunu her yıl arkadaşlarla bağlantı kurmak için paylaşıyorum.
The 3D Blockchain, Airdrop Incoming ve Mainnet is Live gibi gönderilerdeki CORE airdrop hakkındaki bilgilerin tümü aynı airdrop olayına atıfta bulunuyor. Bu gönderi, daha fazla ayrıntı sağlamanın yanı sıra bu bilgileri sentezler.
Etrafımızdaki dünya gibi, dil de sürekli değişiyor. Önceki dönemlerde dil değişiklikleri yıllar hatta on yıllar içinde meydana gelirken, artık günler hatta saatler içinde gerçekleşebilir.