SORU
14 Temmuz 2015, Salı


'' operatör örneğin farklı arabirimler ve sınıflar için davranır

Java instanceof operatör davranışları aşağıdaki ilgili bilmek isterim.

interface C {}

class B {}

public class A {
    public static void main(String args[]) {
        B obj = new B();
        System.out.println(obj instanceof A);      //Gives compiler error
        System.out.println(obj instanceof C);      //Gives false as output
    }
}

Neden böyle? interface C class B, ilişkisi yok ama obj instanceof A bu durumda derleyici hata verir, oysa yanlış veriyor?

CEVAP
14 Temmuz 2015, Salı


Java birden fazla sınıf mirası var çünkü obj tip B A alt edilemez nesne derleme sırasında kesinlikle biliniyor. Öte yandan muhtemelen C, Bu durumda örneğin arayüzü: alt türü olabilir

interface C {}

class B {}

class D extends B implements C {}

public class A {
    public static void main(String args[]) {
        B obj = new D();
        System.out.println(obj instanceof C);      //compiles and gives true as output  
    }
}

Yani isteyen sadece obj instanceof C ifade derleyici söyleyemem peşin olsun olacak doğru veya yanlış, ama bakıyorsun obj instanceof A bunu biliyor, bu her zaman yanlış, bu nedenle anlamsız ve yardımcı olur size önlemek bir hata. Eğer hala programınızda bu anlamsız kontrol etmek istiyorsanız, Object açık bir döküm ekleyebilirsiniz:

System.out.println(((Object)obj) instanceof A);      //compiles fine

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ☆ SUB4SUB CENTER! ☆ spam here

    ☆ SUB4SUB

    22 ŞUBAT 2010
  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • hans peder sahl

    hans peder s

    22 Temmuz 2009