`
wangyanlong0107
  • 浏览: 499787 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

关于java的binding

 
阅读更多

//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;
  }
}

分享到:
评论

相关推荐

    Java binding OpenGL文件包

    jogl(Java binding OpenGL)的文件包。 jar格式。

    JAXB_Java Architecture For XML Binding

    Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准技术,它允许程序开发者将XML文档与Java对象之间进行绑定,实现XML数据的序列化和反序列化。JAXB是Java SE和Java EE环境中的一部分,提供了高效且...

    jaxb 2.0 java architecture for xml binding

    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 ...

    深入解析:Java中JAXB(Java Architecture for XML Binding)实现机制

    JAXB,即Java Architecture for XML Binding,是Java EE的一部分,提供了一种将XML数据结构化为Java对象的机制,以及反向的绑定过程。本文将深入探讨JAXB的实现原理、使用方法和最佳实践。 JAXB为Java开发者提供了一...

    linux环境下成功编译的GDAL JAVA库

    本篇文章将重点讲解如何在CentOS系统上成功编译GDAL的JAVA库,以及如何使用.so格式的库文件进行Java开发。 首先,我们需要确保系统已经安装了必要的依赖。在CentOS中,这些依赖通常包括GCC编译器、Java Development...

    JAXB工具类 xml转为java对象 java对象转为xml

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...

    VDEX Java Binding-开源

    VDEX(词汇定义交换)Java Binding是一个开源项目,专门针对IMS全球学习联盟的VDEX规范设计。这个规范主要关注在教育、培训和学习环境中,如何有效地交换和管理元数据,尤其是词汇表和术语集。VDEX Java Binding为...

    ViewBindingDemo.rar

    其中,ViewBinding是一项强大的视图绑定技术,它能够帮助开发者摆脱对findViewById的依赖,提高代码的可读性和可维护性。本示例"ViewBindingDemo"将向我们展示如何在Activity中使用ViewBinding来实现TextView的显示...

    beans-binding-talk

    **Beans Binding** 是一项强大的技术,它允许开发者轻松地在 Java 应用程序中的不同组件之间建立数据绑定。这项技术基于 JSR 295(Java Specification Request 295),旨在简化 Java Bean 属性之间的同步过程。通过...

    JAXB 利用xsd文件生成java类

    JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,用于将XML文档与Java对象之间进行绑定,实现XML数据的解析和序列化。在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) ...

    xml 绑定 binding

    在Java中,XML绑定有多种实现,如JAXB(Java Architecture for XML Binding)和Castor。 本文主要围绕Java中的XML绑定,特别是使用Castor框架进行讲解。Castor是一个开放源代码的Java库,它提供了XML到Java对象的...

    jzmq-master.zip

    ZooKeeper 用于管理集群中的不同组件,ØMQ 是内部消息系统,JZMQ 是 ØMQ 的 Java Binding。ZeroMQ 是用 C++编写的,而 jzmq 就充当了 Java 与 C++之间的桥梁。ZeroMQ的安装包,本人上传也有资源。

    Android支持JAXB(Java Architecture for XML Binding)

    Android支持JAXB(Java Architecture for XML Binding) JAXB(Java Architecture for XML Binding)是Java领域中的一项标准技术,能够根据XML Schema生成Java类,并将XML实例文档反向生成Java对象树。JAXB提供了将...

    jgoodies-binding-2_6

    JGoodies Binding 是一个开源的Java库,专注于数据绑定和事件处理,它使得Java Swing应用中的模型和视图之间的交互变得更加简单、直观。这个库的版本号为2.6,代表着其在功能稳定性和兼容性上达到了一定的成熟度,...

    Java API for JSON Binding (JSON-B).zip

    Java API for JSON Binding (JSON-B) 是Java平台上的一个标准API,它提供了自动将Java对象绑定到JSON(JavaScript Object Notation)格式的能力。这个API在Java EE 8及更高版本中被引入,作为JSR 367的一部分,旨在...

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具

    Castor是一款强大的Java库,它提供了Java对象到XML数据的自动转换功能,反之亦然。这个插件的主要目的是简化XML处理,特别是在Java应用程序中。它通过创建映射文件(Mapping Files)来定义Java对象和XML元素之间的...

    java6 3d game development2007.pdf

    本书不仅涵盖了Java 3D API,还涉及了JOGL(Java Binding for OpenGL)、JInput(用于输入设备管理)以及JOAL(Java Binding for OpenAL,用于音频处理)等API的使用,为读者提供了全面的3D游戏开发框架。...

    neo4j-java-rest-binding

    neo4j rest封装项目的war包,如果需要源代码可以在csdn资源中搜索neo4j-java-rest-binding,有个neo4j-java-rest-binding.zip的文件下载,但里面没有jar,因为项目使用maven管理jar包,如果不习惯使用maven,可将此...

    Android Data Binding

    1. **概念理解**:Data Binding允许开发者在XML布局文件中声明数据绑定表达式,将UI组件直接与数据模型关联,减少Java代码中的回调和事件处理。 2. **库引入**:在build.gradle模块文件中添加依赖: ``` ...

    MVVM+ViewBinding+Kotlin入门

    相比于Java,Kotlin的语法更加简洁,能减少许多冗余代码,同时提高了开发效率。 **整合MVVM+ViewBinding+Kotlin** 在实际项目中,MVVM与ViewBinding结合使用,可以构建出高效、可测试的Android应用。首先,你需要在...

Global site tag (gtag.js) - Google Analytics