查看原文
其他

【Java编程教程】详解Java 方法覆盖

点击关注 👉 Java面试那些事儿 2023-09-01

整理:Java面试那些事儿


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


换句话说,如果子类提供其父类之一声明的方法的具体实现,则称为方法覆盖。


# Java方法覆盖的使用


  • 方法覆盖用于提供其超类已经提供的方法的具体实现。

  • 方法覆盖用于运行时多态性


Java 方法覆盖规则


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

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

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


文末福利
文末领取:651页Java面试题库

# 在没有方法覆盖的情况下理解问题


让我们了解一下如果我们不使用方法覆盖,我们在程序中可能会遇到的问题。


//Java程序来演示为什么我们需要方法覆盖 //在这里,我们用子类调用父类的方法 //类对象。//创建父类 class Vehicle{ void run(){System.out.println("车辆正在行驶");} } //Creating a child class class Bike extends Vehicle{ public static void main(String args[]){ //创建子类实例 Bike obj = new Bike(); //使用子类实例调用方法 obj.run(); } }


输出:

车辆正在行驶


问题是我必须在子类中提供 run() 方法的特定实现,这就是我们使用方法覆盖的原因。


# 方法覆盖示例


在这个例子中,我们在子类中定义了 run 方法,就像在父类中定义的一样,但它有一些特定的实现。方法名和参数相同,类之间是IS-A关系,所以有方法重写。关注公众号Java面试那些事儿,获取651页Java面试题


//Java Program来说明Java Method Overriding的使用 //创建一个父类。class Vehicle{ //定义一个方法 void run(){System.out.println("自行车正在行驶");} } //创建子类class Bike2 extends Vehicle{ //定义与父类相同的方法 void run(){System.out.println("自行车正在安全行驶");} public static void main(String args[]){ Bike2 obj = new Bike2();//创建对象 obj.run();//调用方法 } }


输出:

自行车正在安全行驶


# Java 方法重写的真实示例


考虑这样一个场景,其中 Bank 是一个提供获取利率功能的类。但是,利率因银行而异。例如,SBI、ICICI 和 AXIS 银行可以提供 8%、7% 和 9% 的利率。


Java 方法覆盖主要用于我们将在下一页学习的运行时多态性。


//Java程序演示Java Method Overriding的真实场景 //其中三个类重写父类的方法。//创建一个父类。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 利率: "+s.getRateOfInterest()); System.out.println("ICICI 利率: "+i.getRateOfInterest()); System.out.println("AXIS 利率: "+a.getRateOfInterest()); } }


输出:

SBI 利率:8ICICI 利率:7AXIS 利率:9


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


不,不能覆盖静态方法。可以通过运行时多态来证明,后面再学习。


这是因为静态方法与类绑定,而实例方法与对象绑定。static属于class区,instance属于heap区。关注公众号Java面试那些事儿,获取651页Java面试题


# 我们可以覆盖 java main 方法吗?


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



程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


热门推荐:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存