logo

Java'da Statik Yöntemi Geçersiz Kabilir miyiz?

Java'da, geçersiz kılma Ve aşırı yükleme en önemli iki özelliğidir nesne yönelimli programlama . Bu özellik, programcı ulaşmak istediğinde kullanılır. polimorfizm . Soru, Java'daki statik yöntemi geçersiz kılabilir miyiz? veya Java'da statik yöntemi aşırı yükleyebilir misiniz? sorulan en önemli iki soru Java röportajı . Bu bölümde kısaca aşırı yükleme ve geçersiz kılmayı anlayacağız. sorusunun cevabını da açıkladık. neden Java'daki statik yöntemi geçersiz kılamıyoruz?

Statik Yöntem

Yöntem adından önce statik bir anahtar kelimeye sahip olan yöntem, statik yöntem . Aynı zamanda şu şekilde de bilinir: sınıf düzeyinde yöntem . Statik yöntemin bir kopyası sınıfın tüm nesneleri tarafından paylaşılır.

 public static int sum() { } 

Statik yöntemleri sınıf adını kullanarak çağırabiliriz. Örneğin, Math.abs(a) yöntem . Yöntem, iletilen bağımsız değişkenin mutlak değerini döndürür. Statik yöntem, örnek değişkenlere veya yöntemlere erişemez.

Yöntemi Geçersiz Kılma

Bu bir özelliğidir nesne yönelimli programlama . Çalışma zamanı polimorfizmini elde etmek için kullanılır. Alt sınıf, üst sınıfı tarafından zaten sağlanan bir yöntemin özel bir uygulamasını sağlar. yöntemi geçersiz kılma. Yöntemin ebeveyn ve çocuk sınıfındaki imzası aynı olmalıdır. İçinde yöntem geçersiz kılma Hangi yöntemin yürütüleceğine çalışma zamanında karar verilir. Çağırdığımız nesneye göre karar veriliyor.

Yöntem Aşırı Yüklemesi

Bu aynı zamanda nesne yönelimli programlamanın bir özelliğidir. Derleme zamanı polimorfizmini elde etmek için kullanılır. Aynı yöntem adını ancak farklı imzaları kullanmamıza olanak tanır. Bir sınıfın aynı ada sahip ancak farklı yöntem imzasına sahip birden fazla yöntemi varsa, buna denir. yöntem aşırı yüklemesi .

Aşırı yükleme ve geçersiz kılmanın ne olduğunu öğrendik. Şimdi asıl noktaya geçiyoruz.

Statik bir yöntemi aşırı yükleyebilir miyiz?

Cevap Evet . Statik yöntemleri aşırı yükleyebiliriz. Ancak yöntem imzasının farklı olması gerektiğini unutmayın. Örnek olarak aşağıdaki Java programını düşünün.

Aşırı YüklemeStatikYöntemÖrnek1.java

 public class OverloadStaticMethodExample1 { //static method public static void display() { System.out.println('Static method called.'); } //overloaded static method public static void display(int x) { System.out.println('An overloaded static method called.'); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample1.display(); OverloadStaticMethodExample1.display(160); } } 

Çıktı:

 Static method called. An overloaded static method called. 

Burada şöyle bir soru ortaya çıkıyor Yalnızca statik anahtar kelimeyle farklıysa yöntemleri aşırı yükleyebilir miyiz?

Cevap HAYIR. Yalnızca statik anahtar kelimeyle farklılık gösteren iki yöntemi geçersiz kılamayız. Örnek olarak aşağıdaki Java programını düşünün.

Aşırı YükStatikYöntemÖrnek2.java

 public class OverloadStaticMethodExample2 { //static method public static void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //non-static method public void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample2.sum(12, 90); } } 

Yukarıdaki programı derlediğimizde aşağıdaki hatayı gösteriyor.

 error: method sum(int,int) is already defined in class OverloadStaticMethodExample2 

Statik bir yöntemi geçersiz kılabilir miyiz?

HAYIR, statik yöntemleri geçersiz kılamayız çünkü yöntem geçersiz kılma, çalışma zamanındaki dinamik bağlamayı temel alır ve statik yöntemler, derleme zamanında statik bağlama kullanılarak bağlanır. Bu nedenle statik yöntemleri geçersiz kılamayız.

Yöntemin çağrılması, statik yöntemi çağıran nesnenin türüne bağlıdır. Anlamı:

  • Ebeveyn sınıfı nesnesini kullanarak statik bir yöntem çağırırsak, orijinal statik yöntem ebeveyn sınıftan çağrılacaktır.
  • Eğer alt sınıf nesnesini kullanarak statik bir yöntem çağırırsak, alt sınıfın statik yöntemi de çağrılacaktır.

Aşağıdaki örnekte, ParentClass'ın display() adında statik bir yöntemi vardır ve ChildClass'ın da aynı yöntem imzası vardır. Türetilmiş sınıftaki (ChildClass) yöntem, temel sınıftaki yöntemi gizler. bir örnek görelim.

Aşırı YükStatikYöntemÖrnek3.java

 public class OverloadStaticMethodExample3 { public static void main(String args[]) { ParentClass pc = new ChildClass(); //calling display() method by parent class object pc.display(); } } //parent class class ParentClass { //we cannot override the display() method public static void display() { System.out.printf('display() method of the parent class.'); } } //child class class ChildClass extends ParentClass { //the same method also exists in the ParentClass //it does not override, actually it is method hiding public static void display() { System.out.println('Overridden static method in Child Class in Java'); } } 

Çıktı:

 display() method of the parent class.