http://tech.ccidnet.com/art/3539/20070813/1174977_1.html
首先看一下下面的示例代码 :
Parent.java
public class Parent...{
public void parentMethod() ...{
}
}
|
IChild.java
public interface IChild ...{
void interfaceMethod();
}
|
Child.java
public class Child extends Parent implements IChild ...{
@Override
public void parentMethod() ...{
}
@Override
public void interfaceMethod() ...{
}
}
|
由于代码很简单,我就不做说明
上述代码在jdk6下可以编译通过
而在jdk5下编译无法通过,输出的错误信息如下:
Child.java:7: 方法未覆盖其父类的方法
@Override
^
1 错误
上面的错误信息说在Child.java第七行的Override注解是不对的,不对的原因是该方法(interfaceMethod)不是父类方法。
当然,实际上这个方法是类实现的接口中方法,但是,这个语法的jdk6的下面是可以通过的,也就是说java6认为类覆盖父类方法与实现接口方法都叫override,而jdk5不是这样认为的,不知道这是当初jdk5的bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从OO角度来看,覆盖父类方法与实现接口方法都可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种表现方式。这从jdk6的支持这个功能就可以看出。
差一点忘了:
标准的java api文档java5与java6对Override annotation的的解释一样的
java5:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
java6:
Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.
两段说明一模一样,让人搞不清楚的是java6文档没有提到Override对interface的支持。
覆写(Override)和重载(Overload)的比较
其实很本质的区别就是看函数特征:覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
函数特征包括函数名,参数的类型和个数。
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a)
那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。
分享到:
相关推荐
帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...
Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 重写(Override)讲解 定义一个名为 Animal 的父类和一个名为 Cat 的...
java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。 @Override,@Deprecated,@SuppressWarnings为常见的3个注解。 注解相当于一种标记,在程序中加上了注解就等于为程序加上了某种标记...
枚举 定义 自实现枚举类 使用 enum 定义枚举类 实现接口的枚举类 枚举类的方法 注解
Java SE5内置了三种标准注解: @Override,表示当前的方法定义将覆盖超类中的方法。 @Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。 @...
为了准确判断覆盖是否成功,需要使用@Override注解。同时,一旦抽象类中的方法签名发生更改,实现类将立即报告编译时错误。 [Mandatory]静态字段或方法应直接通过其类名而不是其相应的对象名来引用。
相信大家对注解应该并不陌生,在现在信息飞速发展的年代,各种优秀的框架或许都离不开注解的使用,像我们在实现接口一个方法时,也会有@Override注解。注解说白了就是对程序做出解释,与我们在方法、类上的注释没有...
熟悉使用@Override注解重写父类方法和使用super关键字调用父类方法。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和成员变量等概念。 在阅读过程中,尝试编写简单的Java程序,创建并使用...
理解@Override注解的作用和使用方式。 了解方法覆盖时的一些规则,如访问修饰符、返回类型和异常处理等。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和继承等概念。 在阅读过程中,尝试...
java 注解 注解的介绍 提到注解,我们会不由的想到注释,其实注解和注释不是一个东西,注释的作用就是解释代码,方便理解和阅读,说白了就是给程序员看的。而注解则不是,注解的作用比较大,可以进行编译检查、生成...
文章目录一、注解是什么?二、JDK中预定义的一些注解1.@Override2.@Deprecated3.@SuppressWarnings4.@SafeVarargs5.@... 从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把
java注解(Annotation)[ˌ ænəˈ teɪʃn],又称java标注,也被称为元数据(关于数据的数据,描述数据的数据)(Metadata)[ˈ metədeɪtə],可用于修饰或者解释包、类、方法、属性、构造器,局部变量等数据信息...
java注解是java5引入的功能,我们能够经常看到,如@Override,但未必对其有深入的了解。了解这方面的知识有助于我们深入理解一些框架,下面就以模仿AndroidAnnotations中三个注解特性来详细说明。 注解布局文件,@...
之所以这么说是因为我们更倾向成为一名注解的使用者而不是创建者。@Override 注解用过吧?@Service 注解用过吧?但你知道怎么自定义一个注解吗? 恐怕你会摇摇头,摆摆手,不好意思地承认自己的确没有自定义过。 01...
警告:该库是使用规范制作的,而不是以重大... 类似 ,但不像Java注解,装饰是它们在运行时应用的功能。 这些是阶段0装饰器,因为尽管,现在是阶段2,但尚未有编译器实现这些更改,并且直到它们执行之前,该库也不会
主要介绍了Java中三种简单注解介绍和代码实例,本文讲解了Override注解、Deprecated注解、Suppresswarnings注解、元注解等内容,需要的朋友可以参考下
注解 概述 给程序说,用于解释代码,java中类,方法,变量,参数和包都能被...java中预定义的注解 @override,强制格式检查 @@Deprecated,已经过时的方法标记 @SuppressWarnings(“all”),警告压制,all为所有警告压
@Override就是注解,它的作用是: 1、检查是否正确的重写了父类中的方法。 2、标明代码,这是一个重写的方法。 1、体现在于:检查子类重写的方法名与参数类型是否正确;检查方法private/final/static等不能被...
加了注解,java编译器、开发工具或是其他程序可以通过反射技术了解你的类或各种元素是否有标记,有什么标记做什么 样的事情。比如:子类重写父类的方法,方法上必须有@override标记;若一个方法已过时不用了,...