猿教程 Logo

Java方法覆盖

如果子类(子类)具有与父类中声明的方法相同的方法,则在java中称为方法覆盖。

换句话说,如果子类提供了由其父类之一提供的方法的特定实现,它被称为方法覆盖。

Java方法覆盖的用法

  • 方法重写用于提供已由其超类提供的方法的特定实现。

  • 方法重写用于运行时多态性

Java方法覆盖的规则

  1. 方法必须与父类中的名称相同

  2. 方法必须具有与父类中相同的参数。

  3. 必须是IS-A关系(继承)。

理解没有方法覆盖的问题

让我们来了解我们在程序中如果我们不使用方法覆盖可能面临的问题。

相关实例:

class Vehicle{
  void run(){System.out.println("Vehicle is running");}
}
class Bike extends Vehicle{
  
  public static void main(String args[]){
  Bike obj = new Bike();
  obj.run();
  }
}
Output:Vehicle is running

问题是,我必须在子类中提供一个特定的run()方法,这就是为什么我们使用方法覆盖。

方法覆盖的示例

在这个例子中,我们定义了在父类中定义的子类中的run方法,但它有一些特定的实现。 方法的名称和参数是相同的,并且类之间有IS-A关系,因此有方法覆盖。

相关实例:

class Vehicle{
  void run(){System.out.println("Vehicle is running");}
  }
  class Bike2 extends Vehicle{
  void run(){System.out.println("Bike is running safely");}

  public static void main(String args[]){
  Bike2 obj = new Bike2();
  obj.run();
  }
}
Output:Bike is running safely

Java方法的实例重写

考虑一种情况,银行是一个提供获取利率的功能的类。 但是,利息率因银行而异。 例如,SBI,ICICI和AXIS银行可以提供8%,7%和9%的利率。

Java method overriding example of bank

相关实例:

class Bank{
int getRateOfInterest(){return 0;}
}

class SBI extends Bank{
int getRateOfInterest(){return 8;}
}

class ICICI extends Bank{
int getRateOfInterest(){return 7;}
}
class AXIS extends Bank{
int getRateOfInterest(){return 9;}
}

class Test2{
public static void main(String args[]){
SBI s=new SBI();
ICICI i=new ICICI();
AXIS a=new AXIS();
System.out.println("SBI Rate of Interest: "+s.getRateOfInterest());
System.out.println("ICICI Rate of Interest: "+i.getRateOfInterest());
System.out.println("AXIS Rate of Interest: "+a.getRateOfInterest());
}
}
Output:
SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

我们可以覆盖静态方法吗?

不,静态方法不能被覆盖。 它可以通过运行时多态来证明,所以我们稍后将学习它。

为什么我们不能覆盖静态方法?

因为静态方法与类绑定,而实例方法与对象绑定。 静态属于类区域,实例属于堆区域。

我们可以重写java main方法吗?

不,因为main是一个静态方法。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/method-overriding-in-java.html