Java でのメソッドのオーバーライドを完全に習得する

WBOY
リリース: 2022-07-29 15:22:45
転載
1640 人が閲覧しました

この記事では、javaに関する関連知識を提供します。サブクラスが親クラスを継承した後、親クラスと同じ名前と同じパラメーターを使用してサブクラスにメソッドを作成できます。親クラスの機能を実現するクラス内で同じ名前とパラメータを持つメソッドを上書きすることをメソッド書き換えと呼びます一緒に見ていきましょう。皆さんの参考になれば幸いです。

Java でのメソッドのオーバーライドを完全に習得する

推奨学習: 「java ビデオ チュートリアル

1. 意味

サブクラスが親を継承した後class では、親クラスと同じ名前、同じパラメータを持つメソッドをサブクラスに記述することで、親クラスの同じ名前、同じパラメータを持つメソッドをオーバーライドできます。この処理をメソッドのオーバーライドと呼びます

2. メソッドのオーバーライドを使用する理由

2.1 親クラスのメソッドがサブクラスのニーズを満たせない場合、メソッドをサブクラスで書き直す必要があります

2.2 質問と分析

たとえば、親クラス Peple とサブクラス Chinese があり、親クラスには人々の会話を出力する Say() メソッドがありますが、サブクラスに呼び出させたい場合は、次のように出力されます。中国人が話しています。とても難しいです。メソッドを直接呼び出すことは明らかに不可能なので、サブクラス

2.3 サンプルコード

Peopleクラス

public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void say(){ System.out.println("人在说话"); } }
ログイン後にコピー
のsayメソッドを書き直す必要があります。

中国語クラス

public class Chinese extends Peple{ public Chinese() { } @Override public void say() { System.out.println("中国人在说话"); } }
ログイン後にコピー

Test03クラス

public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); //当进行方法重写时,调用的是子类的say()方法 } }
ログイン後にコピー

2.4サンプルコード実行スクリーンショット

3.メソッドオーバーライドの使用方法

3.1 基本構文

@Override 权限修饰符 返回值类型 方法名(形参列表){ //子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private //当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void }
ログイン後にコピー

3.2 特殊な分析

3.2.1 サブクラスによってオーバーライドされるメソッドのアクセス許可は、または親クラスのメソッドのアクセス権限と同等

a サンプルコード

People クラス

public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } //没有写访问权限的话,默认是default访问权限 void say(){ System.out.println("人在说话"); } }
ログイン後にコピー

中国語クラス

public class Chinese extends Peple{ public Chinese(){ } //父类say方法的访问权限为default,子类say方法的访问权限为public, // 符合子类方法访问权限大于等于父类方法访问权限的要求 @Override public void say() { System.out.println("中国人在说话"); } }
ログイン後にコピー

Test03 クラス

public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); } }
ログイン後にコピー

b サンプルコード実行時のスクリーンショット

3.2.2 親クラスのメソッドの戻り値の型が基本データ型の場合、メソッドの戻り値の型は次のようにオーバーライドされます。サブクラスも対応する基本データ型です。

a サンプル コード

People クラス

public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public double add(int a,int b){ return a+b; } }
ログイン後にコピー

中国語クラス

public class Chinese extends Peple{ public Chinese(){ } @Override public double add(int a,int b) { return a+b+1; } }
ログイン後にコピー

Test03 クラス

public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); System.out.println("求和之和再加上1的结果为: "+c.add(2, 3)); } }
ログイン後にコピー

b サンプルコード実行時のスクリーンショット

#3.2.3 親クラスのメソッドの戻り値の型が void の場合、サブクラスによってオーバーライドされるメソッドの戻り値の型もvoid

a サンプル コード

People クラス

public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void eat(){ System.out.println("人的主食一般是熟食"); } }
ログイン後にコピー

中国語クラス

public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中国人的主食是大米或者小麦"); } }
ログイン後にコピー
ログイン後にコピー

Test03 クラス

public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
ログイン後にコピー
ログイン後にコピー

b サンプル コード実行時のスクリーンショット

3.2.4 親クラスのメソッドが静的に変更される場合、サブクラスはメソッドをオーバーライドできません。

a エラー コード例

People クラス

public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public static void eat(){ System.out.println("人的主食一般是熟食"); } }
ログイン後にコピー

中国語クラス

public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中国人的主食是大米或者小麦"); } }
ログイン後にコピー
ログイン後にコピー

Test03クラス

public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
ログイン後にコピー
ログイン後にコピー
b サンプルコード実行スクリーンショット

コンパイル時にアイデアによって表示されるエラーメッセージ

#強制実行後に表示されるエラー メッセージ

3.3 メソッド書き換えに関するヒント

3.3.1メソッドのコピー

手順

1. まず、サブクラス

2 によってオーバーライドする必要がある親クラスのメソッドを直接コピー (Ctrl C) します。貼り付け (Ctrl V) ) をサブクラス

3 に追加します。親クラスでは達成できない要件の実現を容易にするために、サブクラス内の関数を変更します。

操作スクリーンショットの表示

#3.3 .2 コンパイラプロンプトメソッド

手順

1. まず、サブクラスに英語の @ 記号

# を記述します。 2. プロンプト「オーバーライド/実装メソッド in...

3」を選択します。ダブルクリックすると、オーバーライド メソッド選択リストのポップアップ ウィンドウが表示されます

4プロンプトに従って、オーバーライドする必要がある対応するメソッドを選択します。

5. [OK] ボタンをクリックすると、選択したメソッドのオーバーライドされたメソッドがサブクラス

6 に生成されます。生成されたオーバーライドされたメソッドで自動的に生成された最初の行を削除し、必要に応じてメソッド本体に追加します。適切なステートメントを作成します。

操作スクリーンショットの表示

##3.3.3 ショートカット キー メソッド

手順

1. オーバーライドされたメソッドが配置される場所にマウスを移動します。

#2. キーボードの Alt キーと Insert キーを同時に押します。

3. ポップアップ ボックスで、[メソッドのオーバーライド] を選択します

#4. ダブルクリックすると、インターフェイスがポップアップ表示されます。インターフェイスで、サブクラスによってオーバーライドする必要があるメソッドを選択します

5. [OK] ボタンをクリックします。必要な書き換えメソッドは後で生成されます

6. 自動生成された書き換えメソッドの最初の行を削除し、メソッド本体に適切なステートメントを記述します

操作スクリーンショットの表示

# 推奨学習: 「

Java ビデオ チュートリアル

>>

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

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!