動手動腦6

1ExplorationJDKSource.java示例java

此示例中定義了一個類A,它沒有任何成員:ide

class A { }ui

示例直接輸出這個類所建立的對象spa

public static void main(String[] args)    {設計

System.out.println(new A());對象

}blog

源程序:get

public class ExplorationJDKSource {hash

/**it

 * @param args

 */

public static void main(String[] args) {

System.out.println(new A());

}

}

class A{}

運行結果截圖:

運行結果分析:

  main方法實際調用的是public void println(Object x),在內部調用String類的valueOf方法;

  ValueOf方法內部又調用Object.toString方法:

Public String toString(){

     Return getClass()getName()+」@」+Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM設計者實現:

         Public native inthashCode();

因此最後輸出的是類名A@,後邊的輸出屬於隨機的。

 

二、Fruit.java 

代碼:

public class Fruit

{

 

public String toString()

{

return "Fruit toString.";

}

 

public static void main(String args[])

{

Fruit f=new Fruit();

System.out.println("f="+f);

// System.out.println("f="+f.toString());

}

}

運行結果分析:

  main方法實際調用的是public void println(Object x),在內部調用String類的vulueOf方法;

  ValueOf方法內部又調用Object.toString方法:

Public String toString(){

     Return getClass()getName()+」@」+Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM設計者實現:

         Public native inthashCode();

因此最後輸出的是類名A@,後邊的輸出屬於隨機的。

 

二、Fruit.java 

代碼:

public class Fruit

{

public String toString()

{

return "Fruit toString.";

}

public static void main(String args[])

{

Fruit f=new Fruit();

System.out.println("f="+f);

// System.out.println("f="+f.toString());

}

}

注意最後一句,一個字串和一個對象「相加」,獲得如下結果:

爲什麼得以上結果?

結果分析:

  Fruit類覆蓋了Object類的toString方法。在「+」運算中,當任何一個對象與一個String對象,鏈接時,會隱式地調用其toString()方法,默認狀況下,此方法返回「類名 @ + hashCode」。爲了返回有意義的信息,子類能夠重寫toString()方法。

二、「方法覆蓋(override)」的要點

  (1)方法覆蓋要求子類與父類的方法如出一轍,不然就是方法重載(overload);

  (2)靜態方法和最終方法(帶關鍵字final的方法)不能被覆蓋;

  (3)抽象方法必須在具體類中被覆蓋(參見abstract修飾一章)。

  在子類中,若要調用父類中被覆蓋的方法,能夠使用super關鍵字(最後發現不會用)

源代碼:

class A

{

int i=1,j=2;

int plus()

{

return i +j;

}

}

class B extends A

{

int i=10,k=20;//覆蓋父類的i

int plus()

{

return i+j+k;//覆蓋父類的同名方法

}

}

public class Father {

public void main(String[] args)

{

A a=new A();//定義父類的對象

B b=new B();

System.out.println("a.i="+a.i+","+"a.j="+a.j+","+"a.plus()="+a.plus()); System.out.println("b.i="+b.i+","+"b.j="+b.j+","+"b.plus()="+b.plus());

}

}

相關文章
相關標籤/搜索