1. 程式人生 > >方法的過載和重寫的區別

方法的過載和重寫的區別

方法過載:指同一個類中多個方法,

方法名相同        //與返回值、訪問修飾符無關

引數列表不同

方法重寫:繼承父類的方法,講繼承的方法重新改寫(不在同一個類中)

例如:一個工程類,有軟體工程師和測試工程師

工程類Engineer.java

public class Engineer {

	//共有的屬性和方法
//	private 私有化的訪問修飾符 就是子類也不能繼承
	//protected 訪問修飾符子類可以繼承
	protected int id;
	protected String name;
	protected String entertime;
	
	public Engineer(int id, String name, String entertime) {
		super();
		this.id = id;
		this.name = name;
		this.entertime = entertime;
	}

	public void showinfo(){
		System.out.print("編號:"+id+",姓名:"+name+",入職時間:"+entertime);
	}
}

軟體工程師類SoftEngineer.java

public class SoftEngineer extends Engineer {

	//獨有的屬性和方法
	private String type;//語言型別

	public SoftEngineer(int id, String name, String entertime,String type) {
		super(id, name, entertime);
		// TODO Auto-generated constructor stub
		this.type = type;
	}
	
	public void coding(){
		System.out.println("正在程式設計。");
	}
	
	@Override
	public void showinfo() {
		// TODO Auto-generated method stub
		super.showinfo();
		System.out.println(",語言型別是:"+type);
	}
}

測試工程師類TestEngineer.java

public class TestEngineer extends Engineer {

	private String level;

	public TestEngineer(int id, String name, String entertime,String level) {
		super(id, name, entertime);
		// TODO Auto-generated constructor stub
		this.level = level;
	}
	
	public void test(){
		System.out.println("正在測試。。");
	}
	
	/**
	 * 方法重寫(呼叫(重寫)父類中有的方法)
	 * 的預設行為是呼叫父類方法內容
	 * 作用:可以在子類中修改父類的內容
	 */
	@Override//@:註解識別符號   //重寫
	public void showinfo() {
		// TODO Auto-generated method stub
		super.showinfo();
		System.out.println(",等級"+level);
	}
}

測試類Test.java

public static void main(String[] args) {
		// TODO Auto-generated method stub

		//呼叫父類中定義的方法結果:
		//1、如果子類沒有重寫父類的方法,呼叫的就是父類的實現
		//如果子類重寫了父類的方法,呼叫的就是子類中的實現
		SoftEngineer soft = new SoftEngineer(1, "李華", "2017-05-21", "java");
		soft.showinfo();
		soft.coding();
		TestEngineer test = new TestEngineer(2, "王娜", "2017-08-08", "c++");
		test.showinfo();
		test.test();
	}

}