尚学堂 老师好!

上海:15201841284

广州:020-2989 6995

深圳:0755-23061965

武汉:027-8798 9193

西安:029-8822 8155

Java方法重写

如果子类中具有与父类中声明相同的方法,在java中称为方法覆盖。换句话说,如果子类提供了由其父类提供的其中一个方法的特定实现,则它被称为方法覆盖。所以方法覆盖有两个前提条件:继承和子父类中方法名称相同。

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

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();     } } 
Java

执行上面代码,输出结果如下 -

 Vehicle is running 
Java

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

方法覆盖的示例

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

 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();     } } 
Java

执行输出结果如下 -

 Bike is running safely 
Java

Java方法重写的实例

考虑下面一个真实应用的情况,Bank是一个提供获取利率的功能的类。 但是,利息率因银行不同而有所区别。 例如,SBIICICIAXIS银行可以提供8%7%9%的利率。

Java方法重写

 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());     } } 
Java

执行输出结果如下 -

 SBI Rate of Interest: 8 ICICI Rate of Interest: 7 AXIS Rate of Interest: 9 
Java

问题:可以覆盖静态方法吗?

答: 这是不可以的,静态方法不能被覆盖。可以通过运行时多态来证明不能覆盖,在稍后章节中将学习它。

问题: 为什么不能覆盖静态方法?
答: 因为静态方法是绑定类,而实例方法绑定对象。 静态属于类区域,实例属于堆区域。

问题:可以重写java main方法吗?

答: 这是不可以的,因为main是一个静态方法。

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

  • 北京校区
  • 西安校区
  • 山西校区
  • 武汉校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办
  • 黑龙江项目办

北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE+微服务+大数据     大数据+机器学习+平台架构     Python+数据分析+机器学习  人工智能+模式识别+强化学习   WEB前端+移动端+服务端渲染

地址:陕西省西安市高新区西安软件园西区创新信息大厦A座三层尚学堂

电话:029-88228155 / 18291433445

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

武汉学区地址:武汉市东湖高新区光谷金融港B22栋11楼
咨询电话:027-87989193

深圳校区地址:深圳市宝安区航城大道U8智造产业园U6栋3楼
咨询电话:0755-23061965 / 18898413781

上海尚学堂校区地址:上海市浦东新区城丰路650号
咨询电话:021-67690939

广州校区地址:广州市天河区车陂街道大岗路5号中侨广场2栋321室(四号线车陂站D出口,或brt车陂站)
咨询电话:18948349646

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

黑龙江项目办
地点:哈尔滨市松北区博文路青年部落孵化器1层
电话:15321415678
Copyright 2006-2021 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183   营业执照
网站维护:北京尚学堂科技有限公司昌平分公司