ホームページ  >  記事  >  Java  >  Javaでメソッドをオーバーライドするにはどうすればよいですか?

Javaでメソッドをオーバーライドするにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-06-24 15:08:455949ブラウズ

メソッド書き換えのメソッド: 1. [toString()] メソッド、文字列形式でオブジェクトを返します; 2. [equals()] メソッド、2 つのオブジェクトの参照が等しいかどうかを比較します。 [sq s2=new sq(5,4);println(s1.equals(s2)] です。

Javaでメソッドをオーバーライドするにはどうすればよいですか?

のメソッドで書き換えます。 java メソッド:

Java でのメソッドの書き換えは、Java クラスの 3 つの主要な特性の 1 つである継承に基づいています。継承がなければ、メソッドの書き換えについて話すことはできません。メソッドの書き換えは、次の操作です。プログラム内の親クラスのメソッドがサブクラスのニーズを満たせない場合、サブクラスはメソッドの内容と機能を再定義してサブクラスのニーズを満たすことができます。

(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) ポリゴンクラスを継承したsquareクラスを定義する

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 メソッドとはまったく異なります。サブクラス square では、サブクラス square の show メソッドの関数は、辺の数を出力できるだけでなく、辺の長さも出力されるため、現時点では親クラスの show メソッドはサブクラスのニーズを満たすことができません。開発者はサブクラスのニーズを満たすように show メソッドを書き直す必要があります。これが Java でのメソッドの書き換えです。

実際の開発プロセスでは、メソッドの書き換えが適用される場面は他にもたくさんあります。次に、この記事では、より一般的に使用されるメソッドの書き換えをいくつかリストします。

java の java.lang パッケージの下には Object という名前のクラスです。Object は特別なクラスであり、すべてのクラスの親クラスです。クラスを作成するときに、自分で作成したクラスから継承するように宣言しない場合は、Object のみを継承します。ただし、java では extends Object キーワードが省略されています。Object クラスには、1.toString() メソッド、2.equals() メソッドという 2 つの頻繁に使用されるメソッドがあります。これら 2 つのメソッドは、開発者が作成したクラスでよく繰り返されます。

1. toString() メソッド

toString() メソッドの機能は、文字列の形式でオブジェクトを返すことです。例 :

Polygon p = new Polygon(3);
System.out.println(p.toString());

ここで呼び出される toString() メソッドは、Object クラスの toString() メソッドです。

#出力は次のとおりです:

Javaでメソッドをオーバーライドするにはどうすればよいですか?

#Object クラスの

toString()Javaでメソッドをオーバーライドするにはどうすればよいですか? メソッドが呼び出されると、オブジェクトが呼び出されることがわかります。文字列の形式で返されます。つまり、オブジェクトのアドレスです。

実際のアプリケーションでは、通常、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 クラス名とその属性を文字列形式で出力します。

Javaでメソッドをオーバーライドするにはどうすればよいですか?

2.quals() メソッド Javaでメソッドをオーバーライドするにはどうすればよいですか?

equals() メソッドの具体的な実施形態オブジェクトクラスとはどのようなものですか?その機能は何ですか?古いルールでは、コードに直接アクセスします。

public boolean equals(Object obj) {
        return (this == obj);
    }

これは、ソース コード内の Object クラスの equals() メソッドの特定の実装であるため、

equals()

の関数が次のとおりであることがわかります。 Object のメソッドは、2 つのオブジェクトの参照が等しいかどうかを比較することです。オブジェクト クラスの equals() メソッドを呼び出すと: <pre class="brush:php;toolbar:false">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)); } }</pre>システムの出力は次のようになります:

次に、 square クラスの

equals()Javaでメソッドをオーバーライドするにはどうすればよいですか?メソッドを書き換えます

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()メソッドが再度呼び出されるとき

<pre class="brush:php;toolbar:false">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)); } }</pre>

出力システムの

# 前回の fasle と比較すると、この時点で true が出力されるのは、

equals()Javaでメソッドをオーバーライドするにはどうすればよいですか? メソッドが書き換えられているためです。書き換えられた

equals( )

このメソッドは、2 つのオブジェクトの実際の内容、つまり 2 つのオブジェクトの属性を比較します (注:equals() メソッドは 2 つのオブジェクトのメソッドを比較しません。意味がありません)、等しい場合は true を出力します。 <p> 以上がメソッド書き換えに関する基礎知識と共通点です。ポリモーフィズムに関する章で前に述べたブロガー: メソッドの書き換えもポリモーフィズムの現れで​​す。これで、これらが <code>toString() および equals () メソッドでもあることがわかります。カスタムクラスで書き直されたクラスは、Object クラスとはまったく異なる機能を持ちますが、これは同じものの別の表現でもあり、ポリモーフィズムの性質に沿っています。

推奨チュートリアル: 「Java ビデオ チュートリアル

以上がJavaでメソッドをオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。