Mülakat sorularının %90 güvencesi
300 temel Java mülakat sorusunun listesi bulunmaktadır. Size sorulan herhangi bir temel Java mülakat sorusu varsa, lütfen bunu soru sorma bölümüne gönderin. Sıkça sorulan %90 röportaj sorularını ve cevaplarını burada bulacağınızı garanti ediyoruz.
Temel Java mülakat sorularının yanıtları kısa ve nettir. Temel Java röportaj soruları, Java Temelleri röportaj soruları, OOP röportaj soruları, Dize İşleme röportaj soruları, Çok iş parçacıklı röportaj soruları, koleksiyon röportaj soruları, JDBC röportaj soruları vb. şeklinde kategorize edilir.
1 2 3 4 5
Temel Java: Java Mülakat Sorularının Temelleri
1)Java nedir?
Java yüksek seviyedir, nesne odaklı , sağlam, güvenli programlama dili, platformdan bağımsız, yüksek performanslı, Çok iş parçacıklı ve taşınabilir programlama dili. Tarafından geliştirildi James Gosling Haziran 1991'de. Kendi JRE ve API'sini sağladığı için platform olarak da anılabilir.
2) C++ ve Java arasındaki farklar nelerdir?
Aradaki farklar C++ ve Java aşağıdaki tabloda verilmiştir.
Karşılaştırma Endeksi | C++ | Java |
---|---|---|
Platform bağımsız | C++ platforma bağlıdır. | Java platformdan bağımsızdır. |
Esas olarak şunun için kullanılır: | C++ esas olarak sistem programlama için kullanılır. | Java esas olarak uygulama programlama için kullanılır. Pencere, web tabanlı, kurumsal ve mobil uygulamalarda yaygın olarak kullanılmaktadır. |
Tasarım Hedefi | C++ sistem ve uygulama programlaması için tasarlanmıştır. Bu onun bir uzantısıydı C programlama dili . | Java, yazdırma sistemleri için bir yorumlayıcı olarak tasarlanmış ve oluşturulmuştur, ancak daha sonra ağ bilişimini desteklemek üzere genişletilmiştir. Kullanımı kolay ve daha geniş bir kitleye erişilebilir olma hedefiyle tasarlandı. |
Git | C++ goto ifadesini destekler. | Java, goto ifadesini desteklemiyor. |
Çoklu kalıtım | C++ çoklu kalıtımı destekler. | Java, sınıf yoluyla çoklu kalıtımı desteklemez. Şununla başarılabilir: Java'daki arayüzler . |
Operatör Aşırı Yüklemesi | C++ destekler operatörün aşırı yüklenmesi . | Java, operatörün aşırı yüklenmesini desteklemez. |
İşaretçiler | C++ işaretçileri destekler. İşaretçi programını C++ ile yazabilirsiniz. | Java işaretçiyi dahili olarak destekler. Ancak işaretçi programını Java'da yazamazsınız. Bu, Java'nın Java'da işaretçi desteğini kısıtladığı anlamına gelir. |
Derleyici ve Yorumlayıcı | C++ yalnızca derleyiciyi kullanır. C++, kaynak kodunu makine koduna dönüştüren derleyici kullanılarak derlenir ve çalıştırılır, böylece C++ platforma bağlıdır. | Java hem derleyiciyi hem de yorumlayıcıyı kullanır. Java kaynak kodu derleme zamanında bayt koduna dönüştürülür. Yorumlayıcı bu bayt kodunu çalışma zamanında çalıştırır ve çıktı üretir. Java yorumlandığı için platformdan bağımsızdır. |
Değere Göre Arama ve Referansa Göre Arama | C++ hem değere göre çağrıyı hem de referansa göre çağrıyı destekler. | Java yalnızca değere göre çağrıyı destekler. Java'da referansa göre çağrı yoktur. |
Yapı ve Birlik | C++ yapıları ve birleşimleri destekler. | Java yapıları ve birlikleri desteklemez. |
Konu Desteği | C++ iş parçacığı için yerleşik desteğe sahip değildir. İş parçacığı desteği için üçüncü taraf kitaplıklara dayanır. | Java yerleşiktir iplik Destek. |
Dokümantasyon yorumu | C++ dokümantasyon yorumunu desteklemiyor. | Java, Java kaynak koduna yönelik belgeler oluşturmak için belge yorumunu (/** ... */) destekler. |
Sanal Anahtar Kelime | C++, bir işlevi geçersiz kılıp kılmayacağımıza karar verebilmemiz için sanal anahtar sözcüğü destekler. | Java'nın sanal anahtar sözcüğü yoktur. Statik olmayan tüm yöntemleri varsayılan olarak geçersiz kılabiliriz. Başka bir deyişle, statik olmayan yöntemler varsayılan olarak sanaldır. |
işaretsiz sağa kaydırma >>> | C++ >>> operatörünü desteklemez. | Java, negatif sayılar için üstteki sıfırı dolduran işaretsiz sağa kaydırma >>> operatörünü destekler. Pozitif sayılar için >> operatörüyle aynı şekilde çalışır. |
Miras Ağacı | C++ her zaman yeni bir miras ağacı oluşturur. | Java her zaman tek bir miras ağacı kullanır çünkü tüm sınıflar Java'daki Object sınıfının çocuğudur. Nesne sınıfı, miras Java'daki ağaç. |
Donanım | C++ donanıma daha yakındır. | Java donanımla o kadar etkileşimli değildir. |
Nesne odaklı | C++ nesne yönelimli bir dildir. Ancak C dilinde tek kök hiyerarşisi mümkün değildir. | Java aynı zamanda bir nesne odaklı dil. Ancak Java'da her şey (temel türler hariç) bir nesnedir. Her şey Java.lang.Object'ten türetildiği için tek bir kök hiyerarşisidir. |
3) Java Programlama dilinin özelliklerini listeler.
Java Programlama Dili'nde aşağıdaki özellikler bulunmaktadır.
4) Java sanal makinesinden ne anlıyorsunuz?
Java Sanal Makinesi bilgisayarın Java programını çalıştırmasını sağlayan sanal bir makinedir. JVM, Java kodunda bulunan ana yöntemi çağıran bir çalışma zamanı motoru gibi davranır. JVM, bilgisayar sisteminde uygulanması gereken spesifikasyondur. Java kodu JVM tarafından makineden bağımsız ve yerel koda yakın bir Bayt kodu olacak şekilde derlenir.
5) JDK, JRE ve JVM arasındaki fark nedir?
JVM
JVM, Java Virtual Machine'in kısaltmasıdır; Java bayt kodunun yürütülebileceği çalışma zamanı ortamını sağlayan soyut bir makinedir. Java Virtual Machine'in çalışmasını belirten bir spesifikasyondur. Uygulaması Oracle ve diğer şirketler tarafından sağlanmıştır. Uygulanması JRE olarak bilinir.
JVM'ler birçok donanım ve yazılım platformu için mevcuttur (bu nedenle JVM, platforma bağlıdır). Java sınıfını çalıştırdığımızda oluşturulan bir çalışma zamanı örneğidir. JVM'nin üç kavramı vardır: spesifikasyon, uygulama ve örnek.
JRE
JRE, Java Çalışma Zamanı Ortamı anlamına gelir. JVM'nin uygulanmasıdır. Java Runtime Environment, Java uygulamaları geliştirmek için kullanılan bir dizi yazılım aracıdır. Çalışma zamanı ortamını sağlamak için kullanılır. JVM'nin uygulanmasıdır. Fiziksel olarak mevcuttur. JVM'nin çalışma zamanında kullandığı bir dizi kitaplık + diğer dosyaları içerir.
JDK
JDK, Java Development Kit'in kısaltmasıdır. Java uygulamaları ve uygulamaları geliştirmek için kullanılan bir yazılım geliştirme ortamıdır. Fiziksel olarak mevcuttur. JRE+ geliştirme araçlarını içerir. JDK, Oracle Corporation tarafından yayımlanan aşağıda verilen Java Platformlarından herhangi birinin uygulamasıdır:
- Standart Sürüm Java Platformu
- Kurumsal Sürüm Java Platformu
- Mikro Sürüm Java Platformu
6) JVM tarafından kaç tür hafıza alanı tahsis edilmiştir?
Birçok çeşit:
7) JIT derleyicisi nedir?
Tam Zamanında (JIT) derleyicisi: Performansı arttırmak için kullanılır. JIT, bayt kodunun benzer işlevlere sahip kısımlarını aynı anda derler ve dolayısıyla derleme için gereken süreyi azaltır. Burada derleyici terimi, bir Java sanal makinesinin (JVM) talimat setinden belirli bir CPU'nun talimat setine bir çeviriciyi ifade eder.
8) Platform nedir?
Platform, bir yazılım parçasının yürütüldüğü donanım veya yazılım ortamıdır. Yazılım tabanlı ve donanım tabanlı olmak üzere iki tür platform vardır. Java, yazılım tabanlı bir platform sağlar.
9) Java platformunun diğer platformlardan temel farkları nelerdir?
Java platformu ile diğer platformlar arasında aşağıdaki farklar vardır.
- Java yazılım tabanlı bir platformdur, diğer platformlar ise donanım platformları veya yazılım tabanlı platformlar olabilir.
- Java diğer donanım platformlarının üstünde yürütülürken diğer platformlar yalnızca donanım bileşenlerine sahip olabilir.
10) Java'ya 'bir kez yaz ve her yerde çalıştır' özelliğini veren şey nedir?
Bayt kodu. Java derleyicisi, Java programlarını kaynak kodu ile makine kodu arasındaki ara dil olan sınıf dosyasına (Byte Code) dönüştürür. Bu bayt kodu platforma özel değildir ve herhangi bir bilgisayarda çalıştırılabilir.
11) Sınıf yükleyici nedir?
Classloader, sınıf dosyalarını yüklemek için kullanılan bir JVM alt sistemidir. Java programını çalıştırdığımızda ilk önce sınıf yükleyici tarafından yüklenir. Java'da üç yerleşik sınıf yükleyici vardır.
12) Boş .java dosya adı geçerli bir kaynak dosya adı mı?
Evet, Java, Java dosyamızı şu şekilde kaydetmemize izin verir: .java yalnızca bunu derlememiz gerekiyor javac.java ve tarafından yönetiliyor java sınıf adı Basit bir örnek verelim:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
şuna göre derle javac.java
onu çalıştır java bir
13) Java'da delete, next, main, çıkış veya null anahtar sözcüğü mü?
HAYIR.
14) Komut satırında herhangi bir argüman sağlamazsam, String dizisinde saklanan değer main() yöntemine ne iletilir, boş mu yoksa NULL mu?
Boş ama null değil.
15) Public static void yerine static public void yazarsam ne olur?
Java'da belirticilerin sırası önemli olmadığından program doğru şekilde derlenir ve çalışır.
16) Yerel değişkenlerin varsayılan değeri nedir?
Yerel değişkenler, ne temel değerlere ne de nesne referanslarına herhangi bir varsayılan değerle başlatılmaz.
17) Java'daki çeşitli erişim belirteçleri nelerdir?
Java'da erişim belirticileri, yöntemin, sınıfın veya değişkenin erişim kapsamını tanımlamak için kullanılan anahtar kelimelerdir. Java'da aşağıda verilen dört erişim belirteci vardır.
18) Statik yöntem ve değişkenlerin amacı nedir?
Statik olarak tanımlanan yöntemler veya değişkenler sınıfın tüm nesneleri arasında paylaşılır. Statik, nesnenin değil sınıfın bir parçasıdır. Statik değişkenler sınıf alanında saklanır ve bu tür değişkenlere erişmek için nesneyi oluşturmamıza gerek yoktur. Bu nedenle, sınıfın tüm nesneleri için ortak olan değişkenleri veya yöntemleri tanımlamamız gereken durumlarda statik kullanılır.
Örneğin, bir kolejdeki öğrencilerin toplanmasının simüle edildiği sınıfta, kolejin adı tüm öğrencilerin ortak özelliğidir. Bu nedenle kolej adı şu şekilde tanımlanacaktır: statik .
19) Java'daki Paketlerin avantajları nelerdir?
Java'da paket tanımlamanın çeşitli avantajları vardır.
- Paketler isim çakışmalarını önler.
- Paket daha kolay erişim kontrolü sağlar.
- Dışarıdan görünmeyen ve paketin kullandığı gizli sınıflara da sahip olabiliriz.
- İlgili sınıfları bulmak daha kolaydır.
20) Aşağıdaki Java programının çıktısı nedir?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
Yukarıdaki kodun çıktısı şu şekilde olacaktır:
30Javatpoint Javatpoint1020
Açıklama
İlk durumda, 10 ve 20 sayı olarak kabul edilir ve eklenirse 30 olur. Şimdi bunların toplamı 30 bir dize olarak kabul edilir ve dizeyle birleştirilir. Javatpoint . Bu nedenle çıktı 30Java puanı .
İkinci durumda, Javatpoint dizesi, dize olacak şekilde 10 ile birleştirilir. Javatpoint10 bu daha sonra 20 ile birleştirilecek Javatpoint1020 .
21) Aşağıdaki Java programının çıktısı nedir?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
Yukarıdaki kodun çıktısı şu şekilde olacaktır:
200Javatpoint Javatpoint200
Açıklama
İlk durumda, önce 10 ve 20 sayıları çarpılacak ve ardından sonuç 200, dize olarak değerlendirilecek ve dizeyle birleştirilecektir. Javatpoint çıktıyı üretmek için 200Java puanı .
İkinci durumda, çarpmanın önceliği toplamadan büyük olduğundan 10 ve 20 sayıları önce çarpılarak 200 olacaktır. Sonuç 200, dize olarak kabul edilecek ve dizeyle birleştirilecektir. Javatpoint çıktıyı şu şekilde üretmek için Javatpoint200 .
22) Aşağıdaki Java programının çıktısı nedir?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
Yukarıdaki kod derleme zamanı hatası verecektir çünkü for döngüsü ikinci kısımda bir boole değeri talep etmektedir ve biz bir tamsayı değeri, yani 0 sağlıyoruz.
Temel Java - OOP Kavramları: İlk OOP Mülakat Soruları
50'den fazla OOP (Nesneye Dayalı Programlama ve Sistem) röportaj sorusu verilmektedir. Ancak daha iyi anlaşılması için yapıcı görüşme soruları, statik görüşme soruları, Kalıtım Görüşme soruları, Soyutlama görüşme sorusu, Polimorfizm görüşme soruları vb. gibi birçok bölümde kategorize edilmiştir.
23) Nesneye yönelik paradigma nedir?
Ait olduğu sınıfta tanımlanmış veri ve yöntemlere sahip nesnelerin temel alındığı bir programlama paradigmasıdır. Nesne yönelimli paradigma, modülerlik ve yeniden kullanılabilirliğin avantajlarını birleştirmeyi amaçlamaktadır. Nesneler, uygulamaları ve programları tasarlamak için birbirleriyle etkileşime giren sınıfların örnekleridir. Nesneye yönelik paradigmanın aşağıdaki özellikleri vardır.
- Program tasarımında aşağıdan yukarıya yaklaşımı izler.
- Nesnenin verileri üzerinde işlem yapma yöntemleriyle verilere odaklanın
- Karmaşıklıkları kullanıcıdan gizleyen ve yalnızca işlevselliği gösteren Kapsülleme ve soyutlama gibi kavramları içerir.
- Kalıtım, soyutlama vb. gibi gerçek zamanlı yaklaşımı uygular.
- Nesne yönelimli paradigmanın örnekleri C++, Simula, Smalltalk, Python, C# vb.'dir.
24) Nesne nedir?
Nesne, bazı durum ve davranışlara sahip gerçek zamanlı varlıktır. Java'da Object, nesnenin durumu olarak örnek değişkenlere ve nesnenin davranışı olarak yöntemlere sahip olan sınıfın bir örneğidir. Bir sınıfın nesnesi kullanılarak oluşturulabilir. yeni anahtar kelime.
25) Nesne yönelimli programlama dili ile nesne tabanlı programlama dili arasındaki fark nedir?
Nesne yönelimli dil ile nesne tabanlı dil arasında aşağıdaki temel farklar vardır.
- Nesneye yönelik diller, OOP'lerin tüm kavramlarını takip ederken, nesne tabanlı dil, kalıtım ve polimorfizm gibi OOP'lerin tüm kavramlarını takip etmez.
- Nesne yönelimli diller yerleşik nesnelere sahip değildir, oysa Nesne tabanlı diller yerleşik nesnelere sahiptir; örneğin, JavaScript'in pencere nesnesi vardır.
- Nesne yönelimli programlama örnekleri Java, C#, Smalltalk vb.'dir; nesne tabanlı dil örnekleri ise JavaScript, VBScript vb.'dir.
26) Örnek değişken olarak tanımlanan bir nesne referansının başlangıç değeri ne olacaktır?
Java'da tüm nesne referansları null olarak başlatılır.
Temel Java - OOP Kavramları: Yapıcı Mülakat Soruları
27) Yapıcı nedir?
Yapıcı, bir nesnenin durumunu başlatmak için kullanılan özel yöntem türü olarak tanımlanabilir. Sınıf başlatıldığında ve nesne için bellek tahsis edildiğinde çağrılır. Her seferinde, kullanılarak bir nesne yaratılır. yeni anahtar kelimeyle sınıfın varsayılan kurucusu çağrılır. Yapıcının adı sınıf adına benzer olmalıdır. Yapıcının açık bir dönüş türü olmamalıdır.
Daha fazla detay.28) Java'da kaç tür yapıcı kullanılır?
Yapıcılarda iletilen parametrelere bağlı olarak Java'da iki tür yapıcı vardır.
29) Varsayılan kurucunun amacı nedir?
Varsayılan yapıcının amacı nesnelere varsayılan değeri atamaktır. Java derleyicisi, sınıfta hiçbir kurucu yoksa örtülü olarak varsayılan bir kurucu oluşturur.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }Şimdi Test Edin
Çıktı:
0 null 0 null
Açıklama: Yukarıdaki sınıfta herhangi bir kurucu oluşturmazsınız, dolayısıyla derleyici size varsayılan bir kurucu sağlar. Burada 0 ve null değerleri varsayılan kurucu tarafından sağlanır.
Daha fazla detay.
30) Yapıcı herhangi bir değer döndürüyor mu?
Yıllar: evet, Yapıcı örtülü olarak sınıfın geçerli örneğini döndürür (Yapıcıyla açık bir dönüş türü kullanamazsınız). Daha fazla detay.
31)Yapıcı miras alınır mı?
Hayır, Yapıcı miras alınmaz.
32) İnşaatçı finali yapabilir misiniz?
Hayır, yapıcı nihai olamaz.
çay kaşığı vs yemek kaşığı
33) Kurucuları aşırı yükleyebilir miyiz?
Evet, yapıcı tarafından kabul edilen argümanların sayısı değiştirilerek veya parametrelerin veri türü değiştirilerek yapıcılar aşırı yüklenebilir. Aşağıdaki örneği düşünün.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
Yukarıdaki programda, Test yapıcısı başka bir kurucuyla aşırı yüklenmiştir. Kurucuya yapılan ilk çağrıda, tek argümanlı kurucu çağrılır ve i, 10 değeriyle başlatılır. Ancak kurucuya yapılan ikinci çağrıda, 2 argümanlı kurucu çağrılır ve i başlatılır. 15 değeriyle.
34) Java'da kopya oluşturucudan ne anlıyorsunuz?
Java'da kopya yapıcı yoktur. Ancak, C++'daki kopya yapıcısı gibi, değerleri bir nesneden diğerine kopyalayabiliriz.
Java'da bir nesnenin değerlerini diğerine kopyalamanın birçok yolu vardır. Bunlar:
- Yapıcıya göre
- Bir nesnenin değerlerini diğerine atayarak
- Object sınıfının clone() yöntemiyle
Bu örnekte, Java yapıcısını kullanarak bir nesnenin değerlerini diğerine kopyalayacağız.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }Şimdi Test Edin
Çıktı:
111 Karan 111 Karan
35) Yapıcılar ve yöntemler arasındaki farklar nelerdir?
Yapıcılar ve yöntemler arasında birçok fark vardır. Aşağıda verilmiştir.
Java Oluşturucu | Java Yöntemi |
---|---|
Bir nesnenin durumunu başlatmak için bir yapıcı kullanılır. | Bir nesnenin davranışını ortaya çıkarmak için bir yöntem kullanılır. |
Bir yapıcının dönüş tipi olmamalıdır. | Bir yöntemin bir dönüş türüne sahip olması gerekir. |
Yapıcı örtülü olarak çağrılır. | Yöntem açıkça çağrılır. |
Bir sınıfta herhangi bir kurucunuz yoksa, Java derleyicisi varsayılan bir kurucu sağlar. | Yöntem hiçbir durumda derleyici tarafından sağlanmaz. |
Yapıcı adı sınıf adıyla aynı olmalıdır. | Yöntem adı sınıf adıyla aynı olabilir veya olmayabilir. |
36) Aşağıdaki Java programının çıktısı nedir?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
Aşağıdaki programın çıktısı:
a = 10 b = 15
Burada, a ve b değişkenlerinin veri türü, yani byte, int'ye yükseltilir ve iki tamsayı parametresine sahip ilk parametreli kurucu çağrılır.
37) Aşağıdaki Java programının çıktısı nedir?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
Programın çıktısı 0'dır çünkü i değişkeni dahili olarak 0'a başlatılmıştır. Eğer sınıfta kurucu yoksa varsayılan kurucunun dolaylı olarak çağrıldığını bildiğimiz için, sınıfta kurucu olmadığından i değişkeni 0 olarak başlatılır.
38) Aşağıdaki Java programının çıktısı nedir?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
Var derleyici hatası çünkü ana yöntemde sınıfta bulunmayan varsayılan kurucuya bir çağrı var. Ancak Test sınıfında yalnızca bir parametreli kurucu vardır. Bu nedenle, hiçbir varsayılan kurucu yapıcı tarafından örtülü olarak çağrılmaz.
Çekirdek Java - OOP Kavramları: statik anahtar kelime Röportaj Soruları
39) Statik değişken nedir?
Statik değişken, tüm nesnelerin ortak özelliğine atıfta bulunmak için kullanılır (her nesne için benzersiz değildir), örneğin çalışanların şirket adı, öğrencilerin üniversite adı vb. Statik değişken, sınıf alanında yalnızca bir kez belleğe alınır. sınıf yükleme zamanı. Statik bir değişken kullanmak, programınızın belleği daha verimli hale getirmesini sağlar (bellekten tasarruf sağlar). Statik değişken nesneye değil sınıfa aittir.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }Şimdi Test Edin
Output:111 Karan ITS 222 Aryan ITS
Daha fazla detay.
40) Statik yöntem nedir?
- Statik bir yöntem nesneden ziyade sınıfa aittir.
- Statik yöntemleri çağırmak için nesneyi oluşturmaya gerek yoktur.
- Statik bir yöntem, statik değişkenin değerine erişebilir ve onu değiştirebilir.
41) Java statik yöntemlerine uygulanan kısıtlamalar nelerdir?
Statik yöntemlere iki ana kısıtlama uygulanır.
- Statik yöntem, statik olmayan veri üyesini kullanamaz veya statik olmayan yöntemi doğrudan çağıramaz.
- this ve super, statik olmadıkları için statik bağlamda kullanılamaz.
42) Ana yöntem neden statiktir?
Çünkü nesnenin statik yöntemi çağırmasına gerek yoktur. Ana yöntemi statik olmayan hale getirirsek, JVM'nin önce nesnesini oluşturması ve ardından ekstra bellek tahsisine yol açacak main() yöntemini çağırması gerekecektir. Daha fazla detay.
43) Statik yöntemleri geçersiz kılabilir miyiz?
Hayır, statik yöntemleri geçersiz kılamayız.
44) Statik blok nedir?
Statik blok, statik veri üyesini başlatmak için kullanılır. Sınıf yükleme sırasında ana yöntemden önce yürütülür.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }Şimdi Test Edin
Output: static block is invoked Hello main
Daha fazla detay.
45) Main() metodu olmadan bir programı çalıştırabilir miyiz?
Cevap) Hayır, JDK 1.7'den önce statik blok kullanılarak mümkündü. JDK 1.7'den beri bu mümkün değildir. Daha fazla detay.
46) Statik değiştirici ana yöntemin imzasından kaldırılırsa ne olur?
Program derlenir. Ancak çalışma zamanında 'NoSuchMethodError' hatası veriyor.
47) Statik (sınıf) yöntem ile örnek yöntem arasındaki fark nedir?
statik veya sınıf yöntemi | örnek yöntemi |
---|---|
1) Statik olarak bildirilen bir yöntem, statik yöntem olarak bilinir. | Statik olarak bildirilmeyen bir yöntem, örnek yöntemi olarak bilinir. |
2) Statik yöntemleri çağırmak için nesneleri yaratmamıza gerek yok. | Örnek yöntemleri çağırmak için nesne gereklidir. |
3)Statik olmayan (örnek) üyelere statik bağlamda (statik yöntem, statik blok ve statik iç içe geçmiş sınıf) doğrudan erişilemez. | Statik ve statik olmayan değişkenlerin her ikisine de örnek yöntemlerden erişilebilir. |
4)Örneğin: public static int cube(int n){ return n*n*n;} | Örneğin: genel void msg(){...}. |
48) Kurucuları statik hale getirebilir miyiz?
Statik bağlamın (yöntem, blok veya değişken) nesneye değil sınıfa ait olduğunu biliyoruz. Yapıcılar yalnızca nesne yaratıldığında çağrıldığından, yapıcıları statik yapmanın bir anlamı yoktur. Ancak bunu yapmaya çalışırsanız derleyici, derleyici hatasını gösterecektir.
49) Java'da soyut yöntemleri statik hale getirebilir miyiz?
Java'da soyut yöntemleri statik hale getirirsek, sınıfın bir parçası haline gelecektir ve onu doğrudan çağırabiliriz ki bu da gereksizdir. Tanımsız bir yöntemi çağırmak tamamen işe yaramaz, bu nedenle buna izin verilmez.
50) Soyut bir sınıfta statik değişkenleri ve yöntemleri bildirebilir miyiz?
Evet, statik değişkenleri ve yöntemleri soyut bir yöntemde tanımlayabiliriz. Nesnenin statik bağlama erişmesine gerek olmadığını bildiğimiz için soyut sınıfın adını kullanarak soyut sınıfın içinde bildirilen statik içeriğe erişebiliriz. Aşağıdaki örneği düşünün.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
Çıktı
hi !! I am good !! i = 102
Temel Java - OOP Kavramları: Miras Mülakat Soruları
51) Nedir Bu Java'da anahtar kelime?
Bu anahtar kelime, geçerli nesneyi ifade eden bir referans değişkenidir. Bu anahtar kelimenin Java'da çeşitli kullanımları vardır. Örnek yöntemler, değişkenler, yapıcılar vb. gibi mevcut sınıf özelliklerine atıfta bulunmak için kullanılabilir. Ayrıca yöntemlere veya yapıcılara argüman olarak iletilebilir. Ayrıca yöntemden geçerli sınıf örneği olarak da döndürülebilir.
Daha fazla detay.
52) Bu anahtar kelimenin ana kullanımları nelerdir?
Aşağıdaki kullanımlar vardır Bu anahtar kelime.
53) Referansı şuna atayabilir miyiz? Bu değişken?
Hayır, bu herhangi bir değere atanamaz çünkü her zaman geçerli sınıf nesnesine işaret eder ve bu Java'daki son referanstır. Ancak bunu yapmaya çalıştığımızda derleyici hatası gösterilecektir. Aşağıdaki örneği düşünün.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
Çıktı
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) Yapabilir Bu anahtar kelime statik üyelere başvurmak için kullanılabilir mi?
Evet, bu anahtar sözcüğü statik üyelere başvurmak için kullanmak mümkündür çünkü bu yalnızca geçerli sınıf nesnesine başvuran bir referans değişkenidir. Ancak bildiğimiz gibi, statik değişkenlere nesneler aracılığıyla erişmek gereksizdir, bu nedenle bunu statik üyelere atıfta bulunmak için kullanmak en iyi uygulama değildir. Aşağıdaki örneği düşünün.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
Çıktı
10
55) Bu anahtar kelime kullanılarak yapıcı zincirleme nasıl yapılabilir?
Yapıcı zincirleme, geçerli sınıf nesnesine göre sınıfın başka bir yapıcısından bir kurucuyu çağırmamızı sağlar. Bu anahtar kelimeyi aynı sınıf içinde yapıcı zincirleme gerçekleştirmek için kullanabiliriz. Yapıcı zincirlemeyi gerçekleştirmek için bu anahtar kelimeyi nasıl kullanabileceğimizi gösteren aşağıdaki örneği düşünün.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
Çıktı
ID: 105 Name:Vikas age:22 address: Delhi
56) Bunu geçerli sınıf nesnesinin kendisi yerine bir yönteme aktarmanın avantajları nelerdir?
Bunun geçerli sınıf nesnesine atıfta bulunduğunu bildiğimiz gibi, bu nedenle geçerli sınıf nesnesine benzer olması gerekir. Ancak bunu geçerli sınıf nesnesi yerine bir yönteme aktarmanın iki ana avantajı olabilir.
- bu son değişkendir. Bu nedenle, bu herhangi bir yeni değere atanamaz; mevcut sınıf nesnesi nihai olmayabilir ve değiştirilebilir.
- bu senkronize blokta kullanılabilir.
57) Miras Nedir?
Kalıtım, bir nesnenin başka bir sınıftaki başka bir nesnenin tüm özelliklerini ve davranışlarını edindiği bir mekanizmadır. Kodun Yeniden Kullanılabilirliği ve Yöntemin Geçersiz Kılması için kullanılır. Java'da kalıtımın ardındaki fikir, mevcut sınıfların üzerine inşa edilen yeni sınıflar oluşturabilmenizdir. Mevcut bir sınıftan miras aldığınızda üst sınıfın yöntemlerini ve alanlarını yeniden kullanabilirsiniz. Üstelik mevcut sınıfınıza yeni yöntemler ve alanlar da ekleyebilirsiniz. Kalıtım, ebeveyn-çocuk ilişkisi olarak da bilinen IS-A ilişkisini temsil eder.
Java'da beş tür miras vardır.
- Tek düzeyli miras
- Çok düzeyli miras
- Çoklu Miras
- Hiyerarşik Miras
- Hibrit Miras
Java'da sınıf aracılığıyla çoklu kalıtım desteklenmez.
Daha fazla detay.58) Java'da Kalıtım neden kullanılıyor?
Java'da kalıtım kullanmanın aşağıda verilen çeşitli avantajları vardır.
- Kalıtım kodun yeniden kullanılabilirliğini sağlar. Türetilmiş sınıfın, yöntemin özel uygulamasını sağlaması gerekmediği sürece, temel sınıfın yöntemini yeniden tanımlamasına gerek yoktur.
- Kalıtım kullanılmadan çalışma zamanı polimorfizmi elde edilemez.
- OOP'leri daha gerçekçi hale getiren gerçek zamanlı nesnelerle sınıfların mirasını simüle edebiliriz.
- Kalıtım veri gizlemeyi sağlar. Temel sınıf, türetilmiş sınıftan bazı verileri özel hale getirerek gizleyebilir.
- Yöntem geçersiz kılma, miras olmadan gerçekleştirilemez. Yöntem geçersiz kılma yoluyla, temel sınıfın içerdiği bazı temel yöntemlerin özel bir uygulamasını verebiliriz.
59) Tüm sınıfların üst sınıfı hangi sınıftır?
Nesne sınıfı, Java'daki diğer tüm sınıfların üst sınıfıdır.
60) Java'da çoklu kalıtım neden desteklenmiyor?
Karmaşıklığı azaltmak ve dili basitleştirmek için Java'da çoklu kalıtım desteklenmez. A, B ve C'nin üç sınıf olduğu bir senaryoyu düşünün. C sınıfı A ve B sınıflarını miras alır. A ve B sınıfları aynı yönteme sahipse ve onu alt sınıf nesnesinden çağırıyorsanız, A veya B sınıfının yöntemini çağırma konusunda belirsizlik olacaktır.
Derleme zamanı hataları çalışma zamanı hatalarından daha iyi olduğundan, 2 sınıfı miras alırsanız Java derleme zamanı hatası oluşturur. Yani ister aynı yönteme sahip olun ister farklı olsun, derleme zamanı hatası olacaktır.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }Şimdi Test Edin
Compile Time Error
61) Toplama nedir?
Toplama, toplam sınıfın sahip olduğu sınıfa bir referans içerdiği iki sınıf arasındaki ilişki olarak tanımlanabilir. Toplama en iyi şekilde şöyle tanımlanır: var-bir ilişki. Örneğin, yaş, isim ve maaş gibi çeşitli alanlara sahip olan Çalışan sınıfının toplamı, Adres Satırı 1, Şehir, Eyalet ve pin kodu gibi çeşitli alanlara sahip Adres sınıfının bir nesnesini de içerir. Yani Çalışan (sınıf)'ın Adres sınıfına ait bir nesnesi olduğunu söyleyebiliriz. Aşağıdaki örneği düşünün.
Adres.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Çalışan.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
Çıktı
111 varun gzb UP india 112 arun gno UP india
62) Kompozisyon nedir?
Bir sınıfın referansını başka bir sınıf içinde tutmak kompozisyon olarak bilinir. Bir nesne diğer nesneyi içeriyorsa, kapsanan nesne, kapsayıcı nesnenin varlığı olmadan var olamıyorsa buna kompozisyon denir. Başka bir deyişle kompozisyonun, iki nesne arasında daha güçlü bir ilişkiyi temsil eden özel bir toplama durumu olduğunu söyleyebiliriz. Örnek: Bir sınıfta öğrenciler bulunmaktadır. Öğrenci ders olmadan var olamaz. Sınıf ve öğrenciler arasında kompozisyon vardır.
63) Toplama ve bileşim arasındaki fark nedir?
Toplama zayıf ilişkiyi temsil ederken kompozisyon güçlü ilişkiyi temsil eder. Örneğin, bisikletin bir göstergesi (toplama) vardır, ancak bisikletin bir motoru (kompozisyon) vardır.
64) Java neden işaretçileri desteklemiyor?
İşaretçi, bellek adresini ifade eden bir değişkendir. Güvenli olmadıkları (güvenliksiz) ve anlaşılması karmaşık oldukları için Java'da kullanılmazlar.
65) Java'da süper nedir?
Süper Java'daki anahtar kelime, doğrudan üst sınıf nesnesine başvurmak için kullanılan bir referans değişkenidir. Alt sınıfın örneğini her oluşturduğunuzda, süper referans değişkeni tarafından atıfta bulunulan üst sınıfın bir örneği örtülü olarak oluşturulur. Eğer super veya this yoksa, super() işlevi sınıf yapıcısında derleyici tarafından dolaylı olarak çağrılır.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }Şimdi Test Edin
Çıktı:
animal is created dog is createdDaha fazla detay.
66) Super anahtar kelimesi kullanılarak yapıcı zincirleme nasıl yapılabilir?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
Çıktı
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) Süper anahtar sözcüğünün ana kullanım alanları nelerdir?
Süper anahtar kelimenin aşağıdaki kullanımları vardır.
- super, doğrudan üst sınıf örnek değişkenine atıfta bulunmak için kullanılabilir.
- super doğrudan ebeveyn sınıfı yöntemini çağırmak için kullanılabilir.
- super() doğrudan ebeveyn sınıfı yapıcısını çağırmak için kullanılabilir.
68) Bu ve süper anahtar kelime arasındaki farklar nelerdir?
this ile super anahtar sözcüğü arasında aşağıdaki farklar vardır.
- Super anahtar sözcüğü her zaman ana sınıf bağlamlarına işaret ederken, bu anahtar sözcük her zaman geçerli sınıf bağlamına işaret eder.
- Super anahtar sözcüğü öncelikle türetilmiş sınıf kurucusu içindeki temel sınıf değişkenlerini başlatmak için kullanılırken, bu anahtar kelime öncelikle sınıf kurucusuna iletildiğinde yerel ve örnek değişkenleri ayırt etmek için kullanılır.
- Super ve this yapıcının içindeki ilk ifade olmalıdır, aksi takdirde derleyici bir hata verecektir.
69) Aşağıdaki Java programının çıktısı nedir?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
Çıktı
Person class constructor called Employee class constructor called
Açıklama
Türetilmiş sınıf yapıcısına hiçbir super() veya this() açıkça dahil edilmemişse, super() derleyici tarafından örtülü olarak çağrılır. Dolayısıyla bu durumda önce Person sınıfı yapıcısı çağrılır, sonra Çalışan sınıfı yapıcısı çağrılır.
70) this() ve super() öğelerinin ikisini de bir yapıcıda kullanabilir misiniz?
Hayır, çünkü this() ve super() sınıf yapıcısındaki ilk ifade olmalıdır.
Örnek:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
Çıktı:
Test.java:5: error: call to this must be first statement in constructor
71)Nesne klonlama nedir?
Nesne klonlama, bir nesnenin tam kopyasını oluşturmak için kullanılır. Object sınıfının clone() yöntemi bir nesneyi klonlamak için kullanılır. java.lang.Klonlanabilir Arayüz, nesne klonunu oluşturmak istediğimiz sınıf tarafından uygulanmalıdır. Cloneable arayüzü uygulamazsak clone() yöntemi CloneNotSupportedException oluşturur.
protected Object clone() throws CloneNotSupportedExceptionDaha fazla detay.
Temel Java - OOP Kavramları: Yöntem Aşırı Yükleme Mülakat Soruları
72) Yöntem aşırı yüklemesi nedir?
Yöntem aşırı yüklemesi, aynı adla ancak farklı imzalarla birden fazla yöntem oluşturmamıza olanak sağlayan polimorfizm tekniğidir. Yöntem aşırı yüklemesini iki şekilde başarabiliriz.
- Argüman sayısını değiştirerek
- Bağımsız değişkenlerin veri türünü değiştirerek
Yöntemin aşırı yüklenmesi programın okunabilirliğini artırır. Programı hızlı bir şekilde anlamak için yöntem aşırı yüklemesi gerçekleştirilir.
Daha fazla detay.73) Java'da dönüş tipini değiştirerek yöntemin aşırı yüklenmesi neden mümkün olmuyor?
Java'da belirsizlikten kaçınmak için programın dönüş tipi değiştirilerek yöntemin aşırı yüklenmesi mümkün değildir.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Şimdi Test Edin
Çıktı:
Compile Time Error: method add(int, int) is already defined in class AdderDaha fazla detay.
74) Metotları statik hale getirerek aşırı yükleyebilir miyiz?
Hayır, metodlara sadece static anahtar sözcüğünü uygulayarak aşırı yükleme yapamayız (parametre sayısı ve türler aynıdır). Aşağıdaki örneği düşünün.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
Çıktı
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) main() yöntemini aşırı yükleyebilir miyiz?
Evet, yöntem aşırı yüklemeyi kullanarak bir Java programında istediğimiz sayıda ana yönteme sahip olabiliriz.
Daha fazla detay.76) Tür yükseltmeyle yöntem aşırı yüklemesi nedir?
Türe Göre yükseltme, yöntemin aşırı yüklenmesidir; tam bir eşleşme bulunmazsa bir veri türünün diğerine dolaylı olarak yükseltilebileceğini kastediyoruz.
Yukarıdaki şemada gösterildiği gibi bayt, short, int, long, float veya double'a yükseltilebilir. Kısa veri türü int, long, float veya double'a yükseltilebilir. Char veri türü int, long, float veya double vb. biçimlere yükseltilebilir. Aşağıdaki örneği düşünün.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Şimdi Test Edin
Çıktı
40 60
77) Aşağıdaki Java programının çıktısı nedir?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
Çıktı
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
Açıklama
Aynı adla, yani toplamla tanımlanmış iki yöntem vardır. İlk yöntem tamsayı ve uzun türü kabul ederken, ikinci yöntem uzun ve tamsayı türünü kabul eder. Geçilen parametreler a = 20, b = 20'dir. Tamsayı değişmezi ile uzun değişmez arasında net bir ayrım yapılmadığından hangi yöntemin çağrılacağını söyleyemeyiz. Bu belirsizlik durumudur. Bu nedenle derleyici hata verecektir.
Temel Java - OOP Kavramları: Mülakat Sorularını Geçersiz Kılan Yöntem
78) Yöntem geçersiz kılma nedir:
Bir alt sınıf, zaten üst sınıfı tarafından sağlanan bir yöntemin belirli bir uygulamasını sağlıyorsa, buna Yöntem Geçersiz Kılma adı verilir. Çalışma zamanı polimorfizmi ve arayüz yöntemlerini uygulamak için kullanılır.
Yöntem geçersiz kılma kuralları
- Yöntemin ana sınıftaki ile aynı ada sahip olması gerekir.
- Yöntemin ana sınıftaki imzayla aynı imzaya sahip olması gerekir.
- İki sınıfın aralarında IS-A ilişkisi olması gerekir.
79) Statik yöntemi geçersiz kılabilir miyiz?
Hayır, statik yöntemi geçersiz kılamazsınız çünkü bunlar nesnenin değil sınıfın parçasıdır.
80) Neden statik yöntemi geçersiz kılamıyoruz?
Bunun nedeni, statik yöntemin sınıfın bir parçası olması ve sınıfa bağlı olması, örnek yöntemin ise nesneye bağlı olması ve static'in sınıf alanında bellek alması ve örneğin bir yığın içinde bellek almasıdır.
81) Aşırı yüklenmiş yöntemi geçersiz kılabilir miyiz?
Evet.
82) Yöntemin Aşırı Yüklenmesi ve Geçersiz Kılması arasındaki fark.
Yöntem Aşırı Yüklemesi | Yöntemi Geçersiz Kılma |
---|---|
1) Yöntemin aşırı yüklenmesi programın okunabilirliğini artırır. | Yöntem geçersiz kılma, üst sınıfı tarafından zaten sağlanan yöntemin özel uygulamasını sağlar. |
2) Sınıf içinde yöntem aşırı yüklemesi meydana gelir. | Yöntem geçersiz kılma, aralarında IS-A ilişkisi olan iki sınıfta meydana gelir. |
3) Bu durumda parametreler farklı olmalıdır. | Bu durumda parametreler aynı olmalıdır. |
83) Özel yöntemleri geçersiz kılabilir miyiz?
Hayır, özel yöntemlerin kapsamı sınıfla sınırlı olduğundan ve sınıf dışından onlara erişemediğimizden, özel yöntemleri geçersiz kılamayız.
84) Alt sınıftaki geçersiz kılınan yöntemin kapsamını değiştirebilir miyiz?
Evet, geçersiz kılınan yöntemin kapsamını alt sınıfta değiştirebiliriz. Ancak şunu bilmeliyiz ki yöntemin erişilebilirliğini azaltamayız. Yöntemin erişilebilirliği değiştirilirken aşağıdaki noktaya dikkat edilmelidir.
- Özel, korumalı, genel veya varsayılan olarak değiştirilebilir.
- Korunan, genel veya varsayılan olarak değiştirilebilir.
- Varsayılan, herkese açık olarak değiştirilebilir.
- Kamu her zaman kamu olarak kalacaktır.
85) Üst sınıf yönteminin throws cümlesini alt sınıfta geçersiz kılarken değiştirebilir miyiz?
Evet, üst sınıf yönteminin throws yan tümcesini alt sınıfta geçersiz kılarken değiştirebiliriz. Ancak istisnai durumların ele alınması durumunda geçersiz kılınırken uyulması gereken bazı kurallar vardır.
- Üst sınıf yöntemi bir istisna bildirmezse, alt sınıf geçersiz kılınan yöntem, kontrol edilen istisnayı bildiremez, ancak denetlenmeyen istisnayı bildirebilir.
- Üst sınıf yöntemi bir istisna bildirirse, geçersiz kılınan alt sınıf yöntemi aynısını, alt sınıf istisnasını veya istisna olmadığını bildirebilir ancak ana istisnayı bildiremez.
86) Aşağıdaki Java programının çıktısı nedir?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
Çıktı
Base class method called with integer a = 10
Açıklama
Method(), Base sınıfında aşırı yüklenmiştir, ancak parametre olarak double türüyle Derived sınıfından türetilmiştir. Yöntem çağrısında tamsayı iletilir.
87) Java'da sanal işlevlere sahip olabilir misiniz?
Evet, Java'daki tüm işlevler varsayılan olarak sanaldır.
88) Kovaryant dönüş tipi nedir?
Artık Java5'ten bu yana, alt sınıf geçersiz kılma yönteminin dönüş türü alt sınıf türü ise, dönüş türünü değiştirerek herhangi bir yöntemi geçersiz kılmak mümkündür. Kovaryant dönüş tipi olarak bilinir. Kovaryant dönüş türü, dönüş türünün alt sınıfla aynı yönde değişebileceğini belirtir.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }Şimdi Test Edin
Output: welcome to covariant return typeDaha fazla detay.
89) Aşağıdaki Java programının çıktısı nedir?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
Çıktı
Derived method called ...
Açıklama
Base sınıfının yöntemi, yani baseMethod(), Derived sınıfında geçersiz kılınır. Test sınıfında, referans değişkeni b (Base sınıfı tipinde) Derived sınıfının örneğini ifade eder. Burada Base ve Derived sınıfı arasında Çalışma Zamanı polimorfizmi elde edilir. Derleme zamanında, Base sınıfında baseMethod yönteminin varlığı kontrol edilir, eğer varsa program derlenir, aksi halde derleyici hatası gösterilir. Bu durumda Base sınıfında baseMethod mevcuttur; bu nedenle başarıyla derlendi. Ancak çalışma zamanında, BaseMethod'un Derived sınıfı tarafından geçersiz kılınıp kılınmadığını kontrol eder, eğer öyleyse Derived sınıfı yöntemi çağrılır, aksi takdirde Base sınıfı yöntemi çağrılır. Bu durumda Derived sınıfı baseMethod'u geçersiz kılar; bu nedenle Türetilmiş sınıf yöntemi çağrılır.
Temel Java - OOP Kavramları: final Anahtar Kelime Mülakat Soruları
90) Son değişken nedir?
Java'da final değişkeni kullanıcının onu güncellemesini kısıtlamak için kullanılır. Son değişkeni başlatırsak değerini değiştiremeyiz. Yani bir değere atanan son değişkenin bir daha değiştirilemeyeceğini söyleyebiliriz. Herhangi bir değere atanmayan son değişken yalnızca sınıf yapıcısı aracılığıyla atanabilir.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classŞimdi Test Edin
Output:Compile Time ErrorDaha fazla detay.
91) Son yöntem nedir?
Herhangi bir yöntemi son yönteme değiştirirsek onu geçersiz kılamayız. Daha fazla detay.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }Şimdi Test Edin
Output:Compile Time Error
92) Son ders nedir?
Herhangi bir sınıfı final yaparsak, onu hiçbir alt sınıfa miras alamayız.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }Şimdi Test Edin
Output:Compile Time ErrorDaha fazla detay.
93) Son boş değişken nedir?
Bildirim sırasında başlatılmayan son değişken, son boş değişken olarak bilinir. Son boş değişkeni doğrudan başlatamıyoruz. Bunun yerine, sınıf yapıcısını kullanarak onu başlatmamız gerekiyor. Kullanıcının başkaları tarafından değiştirilmemesi gereken bazı verilere (örneğin PAN Numarası) sahip olması durumunda kullanışlıdır. Aşağıdaki örneği düşünün:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }Daha fazla detay.
94) Son boş değişkeni başlatabilir miyiz?
Evet, eğer statik değilse yapıcıda başlatabiliriz. Statik boş son değişken ise yalnızca statik blokta başlatılabilir. Daha fazla detay.
95) Ana yöntemi final olarak ilan edebilir misiniz?
Evet, ana yöntemi public static final void main(String[] args){} olarak bildirebiliriz.
96) Aşağıdaki Java programının çıktısı nedir?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
Çıktı
20
Açıklama
i boş son değişken olduğundan. Yalnızca bir kez başlatılabilir. Biz bunu 20 olarak başlattık. Dolayısıyla 20 basılacak.
97) Aşağıdaki Java programının çıktısı nedir?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
Çıktı
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
Açıklama
getDetails() yöntemi nihaidir; bu nedenle alt sınıfta geçersiz kılınamaz.
98) Bir kurucuyu final olarak ilan edebilir miyiz?
Yapıcı hiçbir zaman final olarak bildirilemez çünkü hiçbir zaman miras alınmaz. Yapıcılar sıradan yöntemler değildir; bu nedenle yapıcıları nihai olarak ilan etmenin bir anlamı yoktur. Ancak bunu yapmaya çalıştığınızda derleyici hata verecektir.
99) Bir arayüzü nihai olarak ilan edebilir miyiz?
Hayır, bir arayüzü final olarak ilan edemeyiz çünkü arayüzün tanımını sağlamak için bazı sınıflar tarafından uygulanması gerekir. Bu nedenle bir arayüzü nihai hale getirmenin bir anlamı yoktur. Ancak bunu yapmaya çalışırsanız derleyici bir hata gösterecektir.
100) Nihai yöntem ile soyut yöntem arasındaki fark nedir?
Final yöntemi ile soyut yöntem arasındaki temel fark, tanımını vermek için alt sınıfta bunları geçersiz kılmamız gerektiğinden soyut yöntemin nihai olamayacağıdır.