今天看到一個有趣的程序,如下:
public class Test { public static void main(String[] args){ B b=new B(); b.bb(); } } class A{ private String a="a"; public void visit(){ System.out.println(this.a); System.out.println(this.getClass()); } } class B extends A{ private String a = "b"; public void bb(){ visit(); } }
程序的輸出結果是:
a
class B
在java程序中父類的成員變量和子類的成員變量具有相同的名字,且在父類中將該變量打印出來。這個變量是用this指針指向的。
對於this的說明。1.this關鍵字一般出現在類的方法聲明中。2.哪個對象調用這個方法,this就指向哪個對象。
因此這里的this指的是實例B。當然getClass得到的是B
對於為什么父類和子類中有相同成員變量時,輸出的是A的變量問題。我查閱了一下。感覺在Java瘋狂講義中的面向對象講義中講述的比較靠譜。如下:
與方法不同,對象的屬性不具備多態性。