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

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

上一篇:详解JavaScript的任务、微任务、队列以及代码执行顺序


下一篇:JAVA面向对象之对象和类