一、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. library cache lock

    SESSION 34 执行存储过程: SESSION 43 编译存储过程: SESSION 25 删除存储过程: 1.查询查看library cache lock等待事件的相关会话 SQL> s ...

  2. 【HDOJ】3285 Convex Hull of Lattice Points

    凸包模板题目. /* 3285 */ #include <iostream> #include <cstdio> #include <cstring> #inclu ...

  3. 【HDOJ】4403 A very hard Aoshu problem

    HASH+暴力. /* 4403 */ #include <iostream> #include <cstdio> #include <cstring> #incl ...

  4. POJ1008 1013 1207 2105 2499(全部水题)

    做了一天水题,挑几个还算凑合的发上来. POJ1008 Maya Calendar 分析: #include <iostream> #include <cstdio> #inc ...

  5. 【转】Linux I2C设备驱动编写(一)

    原文网址:http://www.cnblogs.com/biglucky/p/4059576.html 在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter 即I2C适配器 I ...

  6. linux —— 初探

    目录: linux 知识拓展 ubuntu 的安装 安装完成后做的那些事 1.linux 知识拓展 开源世界旅行手册:一个中文网站,根据<Ubuntu教程>而撰写的有趣的文档.作者说:“只 ...

  7. Robotium API -- 等待执行的方法sleep、waitFor

    测试中经常出现明明有控件或者文本,但是由于界面没有载入完成或者其他原因导致assert判断的结果失败.或者两次执行,一次成功,一次失败的情况.所以需要加入这些等待某些控件或者文本载入的方法,以加强程序 ...

  8. linux内核--中断处理程序

    一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码.中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断 ...

  9. cocos2d 高仿doodle jump 无源代码

    1. 游戏视频 主角眼熟吗?没错,上次跑酷游戏中的"30"来Jump了,有三种道具.主角光环,竹蜻蜓.翅膀: 有两种怪物,螃蟹和鸟: 有5种板子.点击屏幕,30会把它的嘴巴3给发射 ...

  10. Visual Studio 2012 Ultimate 上安装 Python 开发插件 PTVS

    1.我的环境 操作系统:32位 Win7 旗舰版 Service Pack 1 VS版本:Microsoft Visual Studio Ultimate 2012 版本 11.0.50727.1 R ...