码迷,mamicode.com
首页 > 其他好文 > 详细

动手动脑6

时间:2015-11-05 22:31:37      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

1ExplorationJDKSource.java示例

此示例中定义了一个类A,它没有任何成员:

class A { }

示例直接输出这个类所创建的对象

public static void main(String[] args)    {

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

}

源程序:

public class ExplorationJDKSource {

/**

 * @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@,后边的输出属于随机的。

 

2、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@,后边的输出属于随机的。

 

2、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()方法。

2、“方法覆盖(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());

}

}

技术分享

 

动手动脑6

标签:

原文地址:http://www.cnblogs.com/1995-qxl/p/4940910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!