重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联专注于富县企业网站建设,成都响应式网站建设,商城网站开发。富县网站建设公司,为富县等地区提供建站服务。全流程按需搭建网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务这篇文章将为大家详细讲解有关如何在java中实现方法重写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在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中实现方法重写就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。