一、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. (?m) 可以让.去匹配换行

    <pre name="code" class="html"># User@Host: zjzc_app[zjzc_app] @ [10.171.24 ...

  2. POJ 1502 MPI Maelstrom( Spfa, Floyd, Dijkstra)

    题目大意: 给你 1到n ,  n个计算机进行数据传输, 问从1为起点传输到所有点的最短时间是多少, 其实就是算 1 到所有点的时间中最长的那个点. 然后是数据 给你一个n 代表有n个点, 然后给你一 ...

  3. 【最短路】Vijos P1046 观光旅游

    题目链接: https://vijos.org/p/1046 题目大意: 给n个点(n<=100),m条无向边(m<=10000),问这张图的最小环长度. (注意:无自环,同一个点对之间的 ...

  4. oracle触发器使用总结

    1.说明 1)触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用 2)触发器分类: 1.DML触发器: 创建在表上,由DML事件引发 2.instead of触发器 ...

  5. apt-mirror

    对于centos来说,搭建一个本地源,相对来说,还是比较简单的.对于ubuntu来说,就复杂很多, 估计也和我不熟悉有关. http://unixrob.blogspot.com/2012/05/cr ...

  6. 你不知道的关于计算机大师 Dijkstra 的事情

    Dijkstra 的全名叫 Edsger Wybe Dijkstra(艾兹赫尔·韦伯·戴克斯特拉).大部分中国程序员如果能记住这个名字是因为学过计算最短路径的「Dijkstra 算法」,然而大部分人都 ...

  7. JavaScript新手学习笔记1——数组

    今天,我复习了一下JavaScript的数组相关的知识,总结一下数组的API: 总共有11个API:按照学习的先后顺序来吧,分别是: ① toString()  语法:arr.toString(); ...

  8. Struts2框架具体解释

    在Struts2的Model-View-Controller模式实现下面五个核心组件: 动作-Actions 拦截器-Interceptors 值栈/OGNL 结果/结果类型 视图技术 Struts ...

  9. [MongoDB] Introduce to MongoDB

    1. Use or create a database: use wandRecorder You will use keyword to create or fetch a exicting dat ...

  10. 外键约束列并没有导致大量建筑指数library cache pin/library cache lock

    外键约束列并没有导致大量建筑指数library cache pin/library cache lock 清除一个100大数据表超过一百万线,发现已经运行了几个小时: delete B001.T_B1 ...