扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关如何在java中实现方法重写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
成都创新互联公司是一家专注网站建设、网络营销策划、重庆小程序开发公司、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十载以来,已经为1000+户外休闲椅各业的企业公司提供互联网服务。现在,服务的1000+客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
在java中方法的重写是建立在java类的三大特性之一:继承性的基础之上的,没有继承性也就不能谈方法的重写。方法的重写是当程序中父类的某一个方法并不能满足子类的需求时,子类可以重新定义该方法的内容与功能来满足子类的需求的一种操作。那么方法的重写具体是如何通过代码来实现的呢,下面博主就带大家一探究竟。
(1)定义一个多边形类
class Polygon{ //属性 private int number_side; //构造器 public Polygon(int number_side) { super(); this.number_side = number_side; } //方法 public int getNumber_side() { return number_side; } public void setNumber_side(int number_side) { this.number_side = number_side; } public void show(){ System.out.println("Number_side is " + this.number_side); } }
在这个类中除了get和set方法之外,还有一个可以输出多边形边数的show方法。
(2)定义一个正方形类继承于多边形类
class square extends Polygon{ //属性 private double length; //构造器 public square(double length, int number_side) { super(number_side); this.length = length; } //方法 public double getLength() { return length; } public void setLength(double length) { this.length = length; } //输出边数和边长 public void show(){ System.out.println("This is a square"); super.show(); System.out.println("Length is " + this.length); } }
可以看到,子类square中仍然有一个show方法,但是方法的功能和语句却与其父类中的show方法大相径庭。因为,在子类square中,子类square的show方法的功能不仅要能实现对边数的输出,更要实现对边长的输出,所以此时父类的show方法并不能满足子类的需求了,开发者应该重新编写一个show方法来满足子类的需求,这就是java中的方法重写。
在实际的开发过程中,应用到方法重写的操作还有其他的很多种情况,接下来本文将列举几个比较常用的方法重写。
在java的java.lang包下有一个类,名为Object。Object了是比较特殊的类,该类是所有类的父类。当我们创建一个类时,如果没有声明继承于我们自己创建的类,那么就继承于Object,只不过java里省略了extends Object关键字。Object类中有两个经常使用到的方法:1.toString()方法;2.equals()方法。这两种方法在开发者创建的类中经常被重写。
1、toString()方法
toString()
方法的功能是将一个对象以字符串的形式返回。例如:
Polygon p = new Polygon(3); System.out.println(p.toString());
这里调用的toString()
方法是Object类中的toString()
方法。
输出为:
由此可见:当调用Object类中的toString()
方法时返回的是一个字符串形式的对象,即该对象的地址。
在实际的应用中通常重写toString()
方法,为对象提供一个特定的字符串输出模式,例如:
public class Test { public static void main(String[] args) { Polygon p = new Polygon(3); System.out.println(p.toString()); } } class Polygon{ //属性 private int number_side; //构造器 public Polygon(int number_side) { super(); this.number_side = number_side; } //..................................此处省略其他无关的方法 @Override public String toString() { return "Polygon [number_side=" + number_side + "]";
在多边形类Polygon中重写了toString()
方法,在main方法中我们创建一个Polygon的对象p并实例化,调用Polygon中重写的toString()
方法。
此时系统输出字符串形式的Polygon类名和其属性。
2、equals()方法
equals()
方法在Object类中的具体体现是怎样的呢?它的功能又是什么呢?老规矩,直接上代码。
public boolean equals(Object obj) { return (this == obj); }
这是源代码中Object类的equals()
方法的具体实现,这样我们便知道,Object中equals()
方法的功能是比较两个对象的引用是否相等。当我们调用Object类中的equals()
方法时:
public class Test { public static void main(String[] args) { square s1 = new square(5.2,4); square s2 = new square(5.2,4); System.out.println(s1.equals(s2)); } }
系统的输出为:
然后我们重写square类中的equals()
方法
public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; square other = (square) obj; if (Double.doubleToLongBits(length) != Double .doubleToLongBits(other.length)) return false; return true; }
再次调用square类中的equals()
方法时
public class Test { public static void main(String[] args) { square s1 = new square(5.2,4); square s2 = new square(5.2,4); System.out.println(s1.equals(s2)); } }
系统的输出为:
相比之前的fasle,此时输出true是因为重写了equals()
方法,而重写的equals()
方法比较的是两个对象的实际内容,即两个对象的属性(注意:equals()方法并不比较两个对象的方法,因为无意义),相等就输出true。
关于如何在java中实现方法重写就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流