一、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、接口和抽象类都可以用类似的方法实现:

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是个接口--监听者接口

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);

转载于:https://blog.51cto.com/lailjiaaie/1127621

通过实例讲解java接口和抽象类的特殊实现方法相关推荐

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

    java接口和抽象类的区别和作用 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过(implements)接口的方 ...

  2. java接口和抽象类的区别(经典面试题)

    java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...

  3. 闭锁java_实例讲解Java并发编程之闭锁

    这篇文章主要介绍了实例讲解Java并发编程之闭锁,闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过,需要的朋友可 ...

  4. 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)

    老帖了,但是还是想自己收录一下.最后也把自己对于这个问题的一些粗糙的理解记录下来. 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的.在这种情况下,各个对象内部是如何实现自己的对 ...

  5. java自旋锁使用_实例讲解Java 自旋锁

    一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下: 所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其他的线程都处在一直尝试获取锁的状态,不会阻塞!!!那么什么 ...

  6. java finally方法_讲解Java编程中finally语句的使用方法

    讲解Java编程中finally语句的使用方法 在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会 ...

  7. 腾讯架构师讲解Java接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...

  8. java 接口与抽象类的区别

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

  9. java 接口和抽象类的区别6_JAVA基础篇-接口和抽象类的区别

    .前言 JAVA是一种面向对象语言,具备抽象(Abstract),封装(packing),继承(extends),多态(polymorphic)四大特性. 我们重点从oop思想∠来分析. .在面向对象 ...

最新文章

  1. 近一个月的学习总结(4.8—5.12)
  2. 第二次 图书助手冲刺第一天
  3. python学习笔记(十一)标准库sys
  4. 笨小猴(信息学奥赛一本通-T1407)
  5. 开源等于免费吗?用事实来说话
  6. python 打开excel并在屏幕上呈现_excel-检查文件是否在Python中打开
  7. html5实现单点登录,用 Authing 10分钟实现单点登录(SSO)
  8. HttpClientHelper的封装
  9. HTML + CSS 为何得不到编程界的认可?
  10. PHP 01 Apache HTTP
  11. hadoop核心框架简介
  12. js 单精度浮点数转10进制_js浮点数精度问题的前世今生?
  13. python复数的模
  14. matlab 矩阵满秩分解
  15. Oracle和SQL里面定义表别名
  16. Codeforces Round #807 (Div. 2) A-C题解
  17. KUKA基坐标创建步骤
  18. Twitter数据采集案例
  19. dropzonejs vue 使用_可能是史上最全面的学习资源 — VUE 开源库篇(一)
  20. 《构建之法》第一次作业

热门文章

  1. python设计模式7-桥接模式
  2. Linux篇 | 用户、组和权限(一)
  3. 技术周刊(2019-02-11 Serverless)
  4. Flutter安装和踩坑指南(windows)
  5. so库文件控制导出符号
  6. 分分钟实现底部导航栏:BottomNavigationBar快速集成
  7. [译] Subject 和 Observable + Observer 的混淆指北[ Android RxJava2 ] ( 这什么鬼系列 ) 第八话...
  8. 由for V.S. for each想到的
  9. 关于ShowModalDialog数据缓存的清除
  10. 数据驱动创新 融合引领变革 2017中国工业大数据大会·钱塘峰会今日在杭州国际博览中心顺利举行...