Rumah  >  Artikel  >  Java  >  在java中如何方法重写?

在java中如何方法重写?

coldplay.xixi
coldplay.xixiasal
2020-06-24 15:08:455973semak imbas

方法重写的方法:1、【toString()】方法,将一个对象以字符串的形式返回;2、【equals()】方法,比较两个对象的引用是否相等,代码为【sq s2=new sq(5,4);println(s1.equals(s2)】。

在java中如何方法重写?

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()方法。

2cf7f82dd3a0d0f15b3eb5a702df2b4.png

输出为:

e09d14a1f2b4fc54ae007b389445e1c.png

由此可见:当调用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()方法。

2b984d856d8f797c39b85fee8e7ba7a.png

此时系统输出字符串形式的Polygon类名和其属性。

7613aeb7a06b5489f646d10e3cfe8f8.png

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

系统的输出为:

3a67169624ea940ac4ac3f587cd81f1.png

然后我们重写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));
}
}

系统的输出为:

abb99f79dd0b28c02724919de07c21d.png

  相比之前的fasle,此时输出true是因为重写了equals()方法,而重写的equals()方法比较的是两个对象的实际内容,即两个对象的属性(注意:equals()方法并不比较两个对象的方法,因为无意义),相等就输出true。

  以上就是关于方法的重写的基本知识和一些常用的点。之前在多态性的那一章博主提到过:方法的重写也是多态性的一种体现,现在我们可以知道,同样都是toString()equals()方法,在自定义类中重写之后和Object类中的功能完全不同,这也是同种事物的不同表现形式,符合多态性的本质。

推荐教程:《java视频教程

Atas ialah kandungan terperinci 在java中如何方法重写?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn