【Java】 方法重载和方法重写

超载

    • 同じ名前で引数が異なるメソッドを複数定義すること。

 

    同一クラスで行われる。
public class Main{
	public static void  main(String[] args) {
		Sushi s = new Sushi();
		s.neta("たまご");
		s.neta("サーモン",220);
		s.neta("いくら",480,"北海道");
		s.neta("ウニ",800,"羅臼");
	}
}
class Sushi {
	void neta(String name) {
		System.out.println(name + " 通常価格 110円");
	}
	void neta(String name,int price){
		System.out.println(name + " 時価 " + price+ "円");
	}
	void neta(String name,int price,String area) {
		System.out.println(area + name + " 時価 " + price + "円");
	}
}
スクリーンショット 2023-09-25 214613.png

覆盖

    • 継承時、親クラスと同じ名前のメソッドを子クラスで再定義すること。

 

    継承クラス間で行われる。
public class Main{
	public static void  main(String[] args) {
		Sushi s = new Sushi("うみ寿司");
		event e = new event("10周年キャンペーン");
		
		s.store();
		s.neta("納豆巻き");

		e.store();
		e.neta("納豆巻き");
	}
}
class Sushi { // 親クラス
	String store;
	 Sushi(String store){
		 this.store = store;	 
	 }
	void store(){
		System.out.println(this.store);
	}
	void neta(String name) {
		System.out.println(name + " 通常価格 110円");
	}
}
class event extends Sushi { //子クラス
	public event(String name) {
		super(name);
	}
	void neta(String name) {
		System.out.println(name + "通常価格 99円");
	}
}
スクリーンショット 2023-09-26 013140.png

「オーバーロード」の定義は複数ありますが、「オーバーライド」は再定義されます。両方ともメソッドに関連している言葉ですが、使い方はまったく異なるので混同に注意してください!
「超載」這個詞有多種定義,「覆蓋」則是重新定義。雖然兩者都與方法相關,但用法完全不同,所以請注意不要混淆!

广告
将在 10 秒后关闭
bannerAds