Java 重写(Override)与重载(Overload)

  • Overload 表示重载
    • 方式:不同的参数类型,不同的参数个数,不同的参数顺序
  • Override 表示重写。

Java 重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变

  • Java 使用abstract进行重写, 抽象类关键字为 abstract, 子类实现 需用 extends
public abstract class AbstractAnimal
{
  public abstract void move();
}

public class Fish extends AbstractAnimal
{
  @Override
  public void move()
  {
    System.out.println("我在水里游...");
  }
}

注意父类的private 修饰的方法是无法被重写的, 也无法访问

  • Java 使用 interface 进行重写, 子类实现用 implements
public interface Animal
{
  public void move();
}

public class Bird implements Animal
{
  public void move()
  {
    System.out.println("我在天上飞...");
  }
}
  • super 的使用

如果子类重写了方法,又想调用父类的方法,就可以使用这个!

public abstract class AbstractAnimal
{
  public abstract void move();
}

public class Fish extends AbstractAnimal
{
  @Override
  public void move()
  {
    super.move();
    System.out.println("我在水里游...");
  }
}

Java 重载

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

  • 方法重载的优点

    • 只需要记住唯一一个方法名称,就可以实现类似的多个功能。
  • 方法的重载与下列因素相关:

    • 参数个数不同
    • 参数类型不同
    • 参数的多类型顺序不同
  • 方法的重载与下列因素无关:

    • 与参数的名称无关
    • 与方法的返回值类型无关
    public abstract class AbstractAnimal
    {
      public abstract void move();
    }
    
    public class Fish extends AbstractAnimal
    {
      @Override
      public void move()
      {
        super.move();
        System.out.println("我在水里游...");
      }
    
      public void move(int direction)
      {
        super.move();
        System.out.println("我在水里游...");
      }
    }
    

    从上面我们可以看到我们 重载了move,加了 public void move(int direction)

    当然构造器也可以通过不同的参数进行重载, 使用方法也是和重载方法一样!