Java重写跟重载概念及区别梳理

Java重写和重载概念及区别梳理

今天回忆了一下Java中重写,重载相关问题,虽然这是老生常谈了,但是还是重新梳理了一下,做个总结,以备参考。

 

重写,重载可以说是Java面向对象特性,继承和多态的具体表现形式,概念如下:


重载:简单说来就是对当前类中显示或者隐士成员方法进行重新定义参数变量但方法名相关的一种方法定义方式。

1.

	/**
	 * 1. 方法重载只可以通过方法名和方法参数来区别,即“方法签名”
	 * @return
	 * @throws NumberFormatException
	 */
	public int getSides(Object obj) throws NumberFormatException {
		return 1;
	}

 

2.

	/**
	 * 2. 不能通过访问权限,返回类型,异常列表进行重载
	 * 
	 * 下面方式错误!
	 */
	private Object getSides() throws NumberFormatException, Exception {
		return 1;
	}

 

3.

	/**
	 * 3. 方法异常类型和数目不会对重载造成影响。
	 * 下面方式错误!
	 */
	public int getSides() throws NumberFormatException, IndexOutOfBoundsException, Exception {
		
	}

 

重写:简单说来重写就是子类对父类(层级上)中非私有成员方法的重新功能定义。

 

1.

	// begin
	
	/**
	 * 1. 重写方法必须和被重写方法的“方法签名”一致,即方法名+参数必须相同
	 */
	public int getSides() {
		return 3;
	}
	// end

 

2.

// begin
	/**
	 *	2. 重写方法访问修饰符一定要大于被重写方法访问修饰符(public > protected > default > private)
	 * 		原因:
	 * 			1. 有一个可以装1升水的瓶子;你需要用另一个瓶子去继承它,那你觉得你能用一个半升谁的瓶子继承他吗?
	 */
	/**
	 * @return
	 * 		本方法重写方式错误
	 * @author zy
	 */
//	protected int getSides() {
//		return 3;
//	}
	
	/**
	 * 对父类Shape中getSide方法进行重写,实现多态
	 * @return
	 */
//	public int getSides() {
//		return 3;
//	}
	// end

 

3.

	// begin
	/**
	 * 3. 重写和被重写方法返回值必须相同
	 * 此方法错误
	 */
//	public double getSides() {
//		return 3d;
//	}
	// end

 

4.

// begin
	/**
	 * 4. 重写方法抛出的异常必须和被重写方法抛出异常一致,或者是其子类
	 * 详细见:overrideexception包中例子
	 */
	public int getSides() throws NullPointerException {
		return 3;
	}
	// end

 

5.

/**
	 * 5. 父类中private方法不能被子类重写,因为private只有父类本类可见。
	 */

 

6.

 

	/**
	 * 6. 静态方法不存在重写概念,重写是面向对象特性,静态方法是类方法,用类名直接访问。
	 */

 

以上就要重装,重写中的关键点,主要把握关键点,理解这两个概念就不难了,附件是回忆过程中的记录。