2011-04-07 10 views
6

कक्षा सी में एक विधि एम के भीतर, this.getClass() हमेशा सी नहीं है?कक्षा सी में एक विधि एम के भीतर, यह नहीं है .getClass() हमेशा सी?

+0

[जावा IAQ से कॉपी किया गया - कक्षा सी में एक विधि एम के भीतर, यह नहीं है .getClass() हमेशा सी?] (Http://norvig.com/java-iaq.html#this.class) द्वारा पीटर Norvig। – Dori

उत्तर

12

नहीं, यह नहीं है। अगर उप-वर्ग हैं।

class C { 
    Class m() { 
     return this.getClass(); 
    } 
} 
class D extends C { } 

और उसके बाद आप कर सकते हैं:

C c = new D(); 
c.m(); // returns D.class 
8

नहीं:

public class C 
{ 
    public void m() 
    { 
     System.out.println(this.getClass()); 
    } 
} 

public class Child extends C {} 

तब:

new Child().m(); // Prints Child 
2

नहीं। उदाहरण:

public class Test { 
    public static void main(String [] args) throws Exception { 
    A a = new B(); 
    a.reportThis(); 
    } 
} 
class A { 
    public void reportThis() { 
    System.err.println(this.getClass().getName()); 
    } 
} 

class B extends A { } 
1

यह कीवर्ड वस्तु (कक्षा का उदाहरण) को संदर्भित करता है जो दायरे में है। इसका अर्थ यह है कि जिस विधि पर विधि कहा गया था- जो बदले में उप-वर्गों के उदाहरणों को भी 'इस' द्वारा संदर्भित किया जा सकता है।

संबंधित मुद्दे