java override

Android的开发者对@Override肯定是非常熟悉,不管是自己的代码中还是书上都会出现,但是他是什么意思呢?如下:
  @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
1、可以当注释用,方便阅读
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错比如你如果没写@Override而你下面的方法名又写错了,这时你的编译器是可以通过的(它以为这个方法是你的子类中自己增加的方法)
  

Java代码 复制代码 收藏代码
  1. public class Sales extends Employee{
  2. //子类除了具有父类的一些属性,也可以有自己的一些属性
  3. private String msn;
  4. public Sales(String mobile,String msn) {
  5. super(mobile);
  6. this.msn = msn;
  7. }
  8. @Override
  9. public String showMess() {
  10. return super.showMess()+"==msn:"+this.msn;
  11. }
  12. }
public class Sales extends Employee{
	
        //子类除了具有父类的一些属性,也可以有自己的一些属性
	private String msn;

	public Sales(String mobile,String msn) {
		super(mobile);
		this.msn = msn;
	}

	@Override
	public String showMess() {
		return super.showMess()+"==msn:"+this.msn;
	}
}


注意这时被覆盖的showMess方法的访问级别是public,可以被任何其他对象访问到。

Java代码 复制代码 收藏代码
  1. public class Parent {
  2. private int num(int i,int j){
  3. return i+j;
  4. }
  5. public static void main(String[] args) {
  6. Parent p = new Child();
  7. System.out.println(p.num(1, 2));
  8. }
  9. }
  10. class Child extends Parent{
  11. public int num(int x,int y){
  12. return x-y;
  13. }
  14. }
public class Parent {
	
	private int num(int i,int j){
		return i+j;
	}
	
	public static void main(String[] args) {
		Parent p = new Child();
		System.out.println(p.num(1, 2));
	}
}
class Child extends Parent{
	
	public int num(int x,int y){
		return x-y;
	}
}


这段代码的执行结果为什么呢?如果你回答-1则错了,正确答案是3。
为什么呢?因为父类的num方法是private的,所以不能被覆盖,所以子类的num方法不是一种Override,因此在子类找不到被覆盖的num方法就会执行父类的num方法。所以结果输出为3.

posted on 2014-11-01 10:15  专业仍肥皂的  阅读(821)  评论(0编辑  收藏  举报

导航