疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java面向对象之方法


 

   

  一、方法的重载

  Java允许在同一个类中定义几个同名的方法,只要这些方法具有不同的参数列表,即方法的参数类型不同,或方法参数个数不同。这种做法称为方法的重载。方法的重载包括以下几种:

  1、成员方法的重载

  重载方法的参数表必须不同,参数的不同主要是参数的类型、顺序、个数不同。

  public class MethodOverload

  {

  public int sum(int a, int b)

  {

  System.out.println("sum(int a, int b)");

  return a + b;

  }

  public double sum(double a, double b)

  {

  System.out.println("sum(double a, double b)");

  return a + b;

  }

  public static void main(String[] args)

  {

  MethodOverload overload = new MethodOverload();

  overload.sum(10, 10);

  overload.sum(10.0, 10.0);

  }

  }

  在上面的例子中定义了同名的方法sum,但参数列表不同,为了区分实际调用的方法,在sum方法中输出了方法的原型,运行后可得到如下结果:

  sum(int a, int b)

  sum(double a, double b)

  由此我们可以看不到,虽然方法的方法名相同,但是Java会根据实际情况调用最适合的方法。

  2、构造方法的重载

  在上一篇博客中也提到了一些构造方法重载的知识,定义多个构造方法其实就是构造方法的重载。当一个类中存在多个重载的构造方法时,他们之间可以相互调用,这种调用通过关键字this实现,同时this调用语句必须是构造方法中的第一个可执行于语句。

  3、注意

  a、参数顺序

  因参数的顺序不同而构建的重载的方法,一定要建立在类型不同的基础上,如果本身类型和个数相同,则不存不在顺序问题。

  b、返回值

  重载方法的返回类型可以相同,也可以不同,但如果仅是返回类型不同,而方法名和形参列表都相同,则是非法的。

  二、方法间的参数传递

  方法声明时的参数称为形式参数(形参)。直到方法被调用时,才被变量或其他数据所替代,而这些具体的变量或数据被称为实际参数。要调用一个方法必须提供实际参数,并且参数类型与顺序必须要与形式参数相对应。

  1、基本数据类型的参数传递

  public class Value

  {

  public void change(int a)

  {

  a += 1;

  }

  public static void main(String[] args)

  {

  Value value = new Value();

  int a = 10;

  value.change(a);

  System.out.println(a);

  }

  }

  运行后输出结果为:10

  此种传递方式形式参数就相当于方法中定义的局部变量,方法调用结束后就被释放了,不会影响到主程序中同名的局部变量,即在方法中对形参进行修改后不会影响到实际传递的实参。

  2、引用数据类型的参数传递

  public class Ref

  {

  private int a;

  public void change(Ref ref)

  {

  ref.a += 1;

  }

  public static void main(String[] args)

  {

  Ref ref = new Ref();

  ref.a = 10;

  ref.change(ref);

  System.out.println(ref.a);

  }

  }

  运行后输出结果为:11

  对象的引用变量并不是对象本身,它们只是对象的引用(名称)。就好像一个人可以有多个名字,同理,一个对象也可以有多个引用名称。因为实际的对象是同一个,所以在方法中对其进行修改后,会影响其它地方的引用。一定要注意区分这两种传递的区别。