サブクラスが親クラスを継承した後、親クラスと同じ名前と同じパラメータを持つメソッドをサブクラスに作成できます。親クラスの制御を実現するために、同じ名前と同じパラメータを持つメソッドを上書きすることをメソッド オーバーライド
2.2 質問と分析
たとえば、次のようになります。親クラス Peple、サブクラス Chinese で、親クラス () メソッドに発言権があり、人々の会話を出力しますが、サブクラスを呼び出すと、中国人の会話が出力されます。明らかにメソッドを直接呼び出すことは機能しません。サブクラス
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("人在说话"); } }
中国語クラス
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()方法 } }
3. メソッド書き換えの使用方法
@Override 权限修饰符 返回值类型 方法名(形参列表){ //子类重写的方法的权限修饰符的访问权限必须大于等于父类的,但是父类不能是private //当父类的返回值类型为基本数据类型或者为void时,子类方法的返回值类型也应该为对应的基本数据类型或者void }
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("中国人在说话"); } }
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); } }
親クラスのメソッドの戻り値の型が基本データ型の場合、サブクラスによってオーバーライドされるメソッドの戻り値の型も、対応する基本データ型である必要があります
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; } }
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); System.out.println("求和之和再加上1的结果为: "+c.add(2, 3)); } }
3.2.3 親クラスのメソッドの戻り値の型が void の場合、サブクラスはオーバーライドします。 メソッドの戻り値の型も void
a サンプルコードPeople classpublic 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("中国人的主食是大米或者小麦"); } }
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
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("中国人的主食是大米或者小麦"); } }
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
強制操作後に表示されるエラーメッセージ
3.3 メソッドの書き換えに関するヒント
手順
1. 最初のサブクラスクラス本体のメソッド以外の位置に、英語の @ 記号を書きます
2. メソッドのオーバーライド/実装を選択します。プロンプト...
3. ダブルクリックすると、オーバーライド メソッドの選択リストが表示されます。ウィンドウ
4. プロンプトに従って、書き換える必要がある対応するメソッドを選択します
5. [OK] ボタンをクリックすると、選択したメソッドのオーバーライド メソッドがサブクラスに生成されます
6. 生成された rewrite メソッドの自動生成された最初の行を削除し、適切なステートメントを記述します要件に従ってメソッド本体内で
#操作スクリーンショットの表示
3.3.3 ショートカットキーの方法手順
1. オーバーライドメソッドを生成する位置にマウスを移動します
2. Alt キーと Insert キーを押します同時にキーボードで
3 を押します。ポップアップ ボックスで、[メソッドのオーバーライド] を選択します。
4. ダブルクリックした後、インターフェイスがポップアップ表示されますので、必要なメソッドを選択します。インターフェイスのサブクラスによってオーバーライドされます
5. [OK] ボタンをクリックすると、必要なオーバーライド メソッドが生成されます
6. オーバーライド メソッドの自動を削除します 最初の行が生成され、次にメソッド本体に適切なステートメントを記述します。
操作スクリーンショットの表示
以上がJava でメソッドのオーバーライドをマスターする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。