一、java中的接口本质上是加约束的抽象类

  //抽象类

  public abstract class AExample

  {

  public abstract int add(int x,int y);

  public abstract int sub(int x,int y);

  }

  //接口

  public interface IExample

  {

  public int add(int x,int y);

  public int sub(int x,int y);

  }

  通常的用法是创建一个新类,这个类实现接口或从抽象类派生。这个新类要实现接口中定义的全部方法,或实现抽象类中的全部抽象方法。

  1、抽象类的实现方法:

  public class MyClass extends AExample

  {

  //其它成员定义:略

  //实现抽象类中的抽象方法

  public int add(int x,int y)

  {

  return x+y;

  }

  public int sub(int x,int y)

  {

  return x-y;

  }

  //其它部分:略

  }

  使用方法:

  AExample ae = new MyClass();

  int s = ae.add(4,2);

  int t = ae.sub(4,2);

  2、接口的实现方法:

  public class MyClass implements IExample

  {

  //其它成员定义:略

  //实现抽象类中的抽象方法

  public int add(int x,int y)

  {

  return x+y;

  }

  public int sub(int x,int y)

  {

  return x-y;

  }

  //其它部分:略

  }

  使用方法:

  IExample ae = new MyClass();

  int s = ae.add(4,2);

  int t = ae.sub(4,2);

  可见,两者本质是一样的,使用方法也是非常相似的。

  二、特殊实现方法

  这里不使用上述从抽象类的派生新类和用接口实现的新类的方法。

  1、先来看一下数组的初始化例子:

  int[] array;

  这样定义数组后,array仅仅是个引用,array[0],array[1]没有实现,即不存在。但是如果在定义时初始化为:

  int[] array = new int[]{1,2};

  1和2看成是数组的两个“成员实例”。这时array[0],array[1]就被实现了,也即array被实现了。

  2、接口和抽象类都可以用类似的方法实现托福答案 www.qcwy123.com

  AExample ae = new AExample(){

  public int add(int x,int y)

  {

  return x+y;

  }

  public int sub(int x,int y)

  {

  return x-y;

  }

  };

  int s = ae.add(4,2);

  int t = ae.sub(4,2);

  这里的所谓“成员实例”就是具体的两个方法add和sub的实现。

  又

  IExample ae = new IExample(){

  public int add(int x,int y)

  {

  return x+y;

  }

  public int sub(int x,int y)

  {

  return x-y;

  }

  };

  int s = ae.add(4,2);

  int t = ae.sub(4,2);

  很神奇吧!

  三、总结

  实际上这种方法在一般情况下用得比较少,主要应用于事件处理问题当中。并且主要使用接口。

  上面的形式是本人在学习java的事件处理编程时遇到一个疑问:为什么java的事件监听者注册时使用的形式是这样的:

  //Person是本人设计的一个含有事件处理的类,PersonListener是个接口--监听者接口托福答案 www.tfjy386.com

  Person p = new Person("Tong",53);

  /////////////////////////////////////////////////////////////////////////////////////////////////////////

  //创建事件监听者接口的实例并注册

  p.addPersonListener( new PersonListener(){

  public void OnNameChanged(PersonEventObject e)

  {

  //自定义事件处理代码

  System.out.println("Name :"+((Person)(e.getSource())).getName());

  }

  public void OnAgeChanged(PersonEventObject e)

  {

  //自定义事件处理代码

  System.out.println("Name :"+((Person)(e.getSource())).getName());

  }

  });

  //////////////////////////////////////////////////////////////////////////////////////////////////

  将上述p.addPersonListener(...)分成两个步骤就一清二楚了:

  PersonListener pl = new PersonListener(){

  public void OnNameChanged(PersonEventObject e)

  {

  //自定义事件处理代码

  System.out.println("Name :"+((Person)(e.getSource())).getName());

  }

  public void OnAgeChanged(PersonEventObject e)

  {

  //自定义事件处理代码

  System.out.println("Name :"+((Person)(e.getSource())).getName());

  }

  };

  p.addPersonListener(pl);

  看一看,就是我们上面讨论的问题。

  通过这个例子,希望许多初学java的人会有所得。

Java接口和抽象类的实现方法的更多相关文章

  1. java 接口和抽象类的区别

    java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...

  2. java接口和抽象类

    关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...

  3. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  4. Java 接口和抽象类差别

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...

  5. Java 接口和抽象类区别(写的很好,转了)

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是 ...

  6. Java 接口和抽象类--缺省模式

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  7. java 接口和抽象类的一个最大的区别

    写在前面,下面是在百度百科上看到的,之前就看过,这次再看感觉有更深的体会,真的是这样,每一个脚印都会留下痕迹 java接口和java抽象类有太多相似的地方,又有太多特别的地方,这里说下两者之间的一个最 ...

  8. Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?

    Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09|  分类: JAVA |  标签:java  |举报|字号 订阅     下面比较一下两者的 ...

  9. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

随机推荐

  1. 快速生成apk 自动发布到网站 便于测试

    遇到的问题: 开发者生成的apk 需要不断给 测试安装让他们测试.有没有脚本自动将最新apk上传到服务器,让测试自己安装测试呢?mac电脑 怎么自己搭建文件服务器  启动Tomcat功能在这里不在赘述 ...

  2. Number Transformation

    Description In this problem, you are given a pair of integers A and B. You can transform any integer ...

  3. Linux下的getline函数

    最近在做国嵌的mp3项目,在mp3主控程序中用到了这个函数,挺好使的,在这里记录一下.注意是linux下的,不是C++中的. 函数原型 ssize_t getline(char **lineptr, ...

  4. HDU5406---CRB and Apple( DP) 2015 Multi-University Training Contest 10

    题意比较简单, dp[i][j] 表示上一次男女吃的deliciousness分别为i, j的时候的吃的最多的苹果. 那么dp[i][j] = max(dp[i][k] + 1),   0 < ...

  5. Java语言与JVM中的Lambda表达式全解

    Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. ...

  6. intent的startActivityForResult()方法

      /******************************************************************************************** * au ...

  7. C# winform 加载网页 模拟键盘输入自动接入访问网络

    声明: 本文原创,首发于博客园 http://www.cnblogs.com/EasyInvoice/p/6070563.html 转载请注明出处. 背景: 由于所在办公室网络限制,笔者每天都使用网络 ...

  8. X5SDK 腾讯浏览器内核

    介绍 官网:http://x5.tencent.com/ 文档:http://x5.tencent.com/doc?id=1003  腾讯浏览服务由QQ浏览器团队出品,致力于优化移动端[webview ...

  9. smarty半小时快速上手教程(转)

    来源于:http://www.chinaz.com/program/2010/0224/107006.shtml 一:smarty的程序设计部分: 在smarty的模板设计部分我简单的把smarty在 ...

  10. 使用URL读取网络图片资源

    URL(Uniform Resource Locator) 对象代表统一资源定位器. 代码如下: public class MainActivity extends ActionBarActivity ...