Android @Override详解

本文详细介绍了Android开发中常用注解 @Override 的作用及使用方法。解释了如何利用此注解来帮助开发者正确实现父类或接口的方法,并强调了在不同Java版本中使用此注解的注意事项。

转载自  Android @Override详解

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

  在重写父类的onCreate时,在方法前面加上@Override系统可以帮你检查方法的正确性。例如:

  public void onCreate(BundlesavedInstanceState){…….}
  这种写法是正确的,如果你写成
  public void oncreate(BundlesavedInstanceState){…….}
  这样编译器会报如下错误——
  The method oncreate(Bundle) of type HelloWorld must override or implement a super type method,
  以确保你正确重写onCreate方法。(因为oncreate应该为onCreate)
  而如果你不加@Override,则编译器将不会检测出错误,而是会认为你新定义了一个方法oncreate。
  

现象:

... java: 1801: method does not override a method from its superclass @Override...

原因:

Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods (which in Java 1.6 can be annotated with @Override, but in Java 1.5 can only be applied to methods overriding a superclass method).

就是说Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明;但1.6已经扩展到对接口的方法;所以如果还是以Java 1.5的编译器来编译的话,会出现错误。

解决方案:

Go to your project/ide preferences and set the java compiler level to 1.6 and also make sure you select JRE 1.6 to execute your program from eclipse.

java的编译器是1.6版本的,选择编译级别为1.6,但重要的一点是,选择build的android库是1.5的即可,生成的apk程序是可以在1.5内核上跑起来。

总的来讲: android sdk的版本与Java JRE的版本可以配置起来用,两者关系应该是疏松的,有高人可以指点错误。

 

1、Android里有一些系统自动调用的回调函数CallbackMethods,如果写的程序运行无错,但是就是没有该有的反应,那就可能是覆写回调函数时没有加@Override且函数名写错了。2、覆写的函数最好 加上@Override。3、可以在Source-> Override/Implement Methods下自动添加覆写和接口函数,可以确保函数名拼写正确。


<think>嗯,用户问的是@Override这个注解有什么用。首先,我得回想一下Java中的注解相关知识。记得@Override是用来修饰方法的,应该和继承有关。对了,当子类覆盖父类的方法时,加上这个注解可以让编译器检查是否正确覆盖了。 那用户可能刚开始学Java,对继承和重写方法不太熟悉。他们可能遇到的问题是,在子类中写了一个方法,但实际并没有正确覆盖父类的方法,导致预期行为不一致。比如方法名拼写错误,或者参数类型不对,这时候@Override就能帮助捕捉这种错误。 还要考虑用户的实际应用场景。比如在Android开发中,重写onCreate方法时,经常使用@Override。如果这里拼错了方法名,没有注解的话,编译器不会报错,导致程序运行出错,而有了注解就能及时发现错误。 另外,可能需要解释一下如果没有这个注解会怎样。比如,如果父类有一个toString方法,子类想覆盖它,但写成了tostring,没有@Override的话,编译器不会报错,但实际是新建了一个方法,而不是覆盖,导致调用时出现问题。这时候加上@Override,编译器就会提示错误,帮助开发者及时修正。 用户可能还想知道这个注解是否必须。虽然不加也能覆盖方法,但使用它可以提高代码的可读性和安全性。所以最佳实践是,在重写方法时都加上@Override。 还要注意,在实现接口的方法时,Java 5之前@Override不能用于接口实现,但Java 6之后可以了。这也是一个需要注意的点,可能需要简要提及,避免用户在使用旧版本时遇到问题。 总结一下,回答时需要分点说明,用途、作用、使用场景以及注意事项,让用户明白其重要性和使用方法。同时语言要简洁,避免技术术语过多,适合不同层次的学习者理解。</think>`@Override` 是 Java 中的一个 **注解(Annotation)**,它的核心作用是**明确标识某个方法是覆盖(重写)父类或实现接口的方法**。以下是它的核心作用和注意事项: --- ### **作用详解** 1. **编译器检查** 当你在方法上添加 `@Override` 时,编译器会强制检查: - 该方法是否真的覆盖了父类的方法 - 父类或接口中是否存在签名完全相同的方法(包括方法名、参数类型、返回类型等) - 如果不符合覆盖规则,编译器会直接报错,避免隐藏的逻辑错误。 **示例:** ```java class Parent { public void print() { System.out.println("Parent"); } } class Child extends Parent { @Override // 如果方法名写错(比如写成 pring()),编译器会报错 public void print() { System.out.println("Child"); } } ``` 2. **代码可读性** 明确告诉阅读代码的人:此方法是重写父类或接口的方法,不是新增的独立方法。 --- ### **使用场景** 1. **覆盖父类方法时** ```java @Override public String toString() { // 重写 Object 类的 toString() return "Custom Object"; } ``` 2. **实现接口方法时** ```java class MyClass implements Runnable { @Override public void run() { // 实现 Runnable 接口的 run() 方法 System.out.println("Running..."); } } ``` --- ### **注意事项** 1. **不要滥用** 仅用于覆盖父类或实现接口的方法,不要用于普通方法。 2. **Java 版本兼容性** - 在 Java 5 及之前,`@Override` 只能用于覆盖父类方法(不能用于接口方法)。 - 从 Java 6 开始,`@Override` 可以同时用于覆盖父类方法和实现接口方法。 --- ### **常见错误** 假设未使用 `@Override`,且方法名拼写错误: ```java class Parent { public void doSomething() {} } class Child extends Parent { public void doSomethiing() { // 拼写错误(多了一个 i) // 编译器不会报错,但实际是新增了一个方法,而非覆盖 } } ``` 加上 `@Override` 后,编译器会立即发现错误,避免隐蔽的 Bug。 --- **总结**:`@Override` 是一个简单但强大的工具,它能通过编译器帮你提前发现代码问题,同时让代码意图更清晰。建议在重写方法时始终添加此注解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值