//file: MyMain.class
class Base
{
int a=10;
public void show()
{
System.out.println(a);
}
}
class Ext extends Base
{
int a=200;
public void show(String s)
{
System.out.println(s);
}
}
public class MyMain
{
public static void main(String[] argv)
{
Ext obj=new Ext();
obj.show();
obj.show("OK");
}
}
请问,执行上面程序,运行是什么?
10
OK
子类要override父类的方法不但名称要相同同时参数表也要相同,不然就是在子类重新写一个方法并不会override父类的
方法,同时返回值也必须相同,不然会报错。
在JDK5.0中增加了java.lang.Override的Annotation类型解决上述问题,同时实现了返回值不同也不认为是语法错误,也会执行override,示例如下:
java.lang.Override是J2SE 5.0中标准的Annotation型态之一,它对编译器说明某个方法必须是重新定义父类别中的方法,编译器得知这项资讯后,在编译程式时如果发现该方法并非重新定义父类别中的方法,就会回报错误。
举个例子来说,如果您在定义新类别时想要重新定义toString()方法,您可能会写成这样:
CustomObject.java
public class CustomObject { public String ToString() { return "customObject"; }}
在撰写toString()方法时,您因为打字错误或其它的疏忽,将之打成了ToString(),但您编译这个类别时并不会出现任何的错误,编译器只当您是定义了一个新的ToString()。
您可以使用java.lang.Override这个Annotation型态,在方法上加上一个@Override的Annotation,告诉编译器您现在定义的这个类别是重新定义父类别中的同名方法,例如:
CustomObject.java
public class CustomObject { @Override public String ToString() { return "customObject"; }}
在编译程式时,编译器看到@Override这个Annotation,了解它必须检查这个方法是不是重新定义父类别的ToString()方法,但父类别中并没有这个方法,所以它会回报错误:
CustomObject.java:2: method does not override a method from its superclas
@Override
^
1 error
重新修改一下程式,编译时就不会有问题了:
CustomObject.java
public class CustomObject { @Override public String toString() { return "customObject"; }}
java.lang.Override是个Marker annotation,简单的说就是用于标示,annotation名称本身即包括了要给工具程式的资讯。
========================
关于这道题目,我给出了一个简单的原则,现在有空顺便说
清楚一点这个有趣的现象。
首先要说明,我认为,属性并非不可以override,
成员变量是可以override的,但是成员变量是在编译时解析的
(而方法是在运行时解析的)
这样一来,当子类要引用父类对象的属性时,实际上它会屏蔽
自己的同名属性,只去访问父类对象的属性,所以直接引用
变量名和通过方法来获取变量的效果是不一样的,
这里有个非常好的例子,有时间好好看看,想想
public class Shadow {
public static void main(String s[]) {
S1 s1 = new S1();
S2 s2 = new S2();
System.out.println(s1.s); // prints S1
System.out.println(s1.getS()); // prints S1
System.out.println(s2.s); // prints S2
System.out.println(s2.getS()); // prints S2
s1 = s2;
System.out.println(s1.s); // prints S1, not S2 -
// since variable is resolved at compile time,static binding
System.out.println(s1.getS()); // prints S2 -
// since method is resolved at run time,dynamic binding
}
}
class S1 {
public String s = "S1";
public String getS() {
return s;
}
}
class S2 extends S1{
public String s = "S2";
public String getS() {
return s;
}
}
相关推荐
jogl(Java binding OpenGL)的文件包。 jar格式。
THE Java™Architecture for XML Binding (JAXB) provides a fast and convenient way to bind between XML schemas and Java representations, making it easy for Java developers to incorporate XML data and ...
NULL 博文链接:https://rayoo.iteye.com/blog/1233534
ZooKeeper 用于管理集群中的不同组件,ØMQ 是内部消息系统,JZMQ 是 ØMQ 的 Java Binding。ZeroMQ 是用 C++编写的,而 jzmq 就充当了 Java 与 C++之间的桥梁。ZeroMQ的安装包,本人上传也有资源。
neo4j rest封装项目的war包,如果需要源代码可以在csdn资源中搜索neo4j-java-rest-binding,有个neo4j-java-rest-binding.zip的文件下载,但里面没有jar,因为项目使用maven管理jar包,如果不习惯使用maven,可将此...
Java API for JSON Binding (JSON-B).zip
llvm-java-binding LLVM C API已经存在Java绑定,例如 。 但是,在Java中使用C API会很痛苦,并且大多数LLVM示例/文档/堆栈溢出都是关于以C ++方式使用LLVM。 为了简化LLVM在Java项目中的使用,我们构建了这个库,...
视图绑定ViewBinding使用指南(Java版)修改build.gradle修改java代码注意事项工程代码 Android Studio 3.6 Canary 11 及更高版本中推出了ViewBinding功能,ViewBinding将逐步替换掉findViewById,还等什么,抓紧...
使用beans-binding的经验和技巧
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...
This release contains Java API for XML Processing (JAXP) 1.4.5, supports Java Architecture for XML Binding (JAXB) 2.2.3, and supports Java API for XML Web Services (JAX-WS) 2.2.4. ...
JGoodies ::Java User Interface Design-->Libraries--> JGoodies Binding
Enhanced JSON support including a new JSON binding API A new REST Reactive Client API Asynchronous CDI Events A new portable Security API Server-Sent Events support (Client & Server-side) Support...
这是IMS VDEX(词汇定义交换)规范的Java API绑定。 它为VDEX定义了与实现无关的Java接口,并提供了该接口的默认实现以及XML编组功能。
JAXBDemo 的代码库。 JAXB 代表 Java Architecture for XML Binding,它允许在 XML 和 java 类之间轻松转换。
Chapter 1 : Java Platform, Enterprise Edition Introduction Deliverables What’s New in Java EE 7 Chapter 2 : Servlets WebServlet Servlet Filters Event Listeners Asynchronous Support ...
the Java API for JSON Processing (JSON-P), the new Java API for JSON Binding (JSON-B), the Java API for WebSocket, the Java Messaging Service (JMS) API 2.0, the Java API for XML Web Services (JAX-WS)...
编写xsd文件,利用jaxb生成java类。
5.1Dynamic Loading and Binding 5.1.1The Fragile Superclass Problem 5.1.2Solving the Fragile Superclass Problem 5.1.3Run-Time Representations 5.2Summary 6. Security in Java 6.1Memory ...
xml数据绑定例子,java,需要用到castor-0.9.5.2.jar和xercesImpl.jar