通过实例讲解java接口和抽象类的特殊实现方法
一、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接口和抽象类的特殊实现方法相关推荐
- java接口和抽象类的区别和作用
java接口和抽象类的区别和作用 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过(implements)接口的方 ...
- java接口和抽象类的区别(经典面试题)
java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...
- 闭锁java_实例讲解Java并发编程之闭锁
这篇文章主要介绍了实例讲解Java并发编程之闭锁,闭锁相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭着的,没有任何线程可以通过,当到达结束状态时,这扇门才会打开并容许所有线程通过,需要的朋友可 ...
- 什么时候使用接口?什么时候使用抽象?选择Java接口还是抽象类 (转)
老帖了,但是还是想自己收录一下.最后也把自己对于这个问题的一些粗糙的理解记录下来. 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的.在这种情况下,各个对象内部是如何实现自己的对 ...
- java自旋锁使用_实例讲解Java 自旋锁
一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下: 所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其他的线程都处在一直尝试获取锁的状态,不会阻塞!!!那么什么 ...
- java finally方法_讲解Java编程中finally语句的使用方法
讲解Java编程中finally语句的使用方法 在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会 ...
- 腾讯架构师讲解Java接口的继承与抽象类
在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...
- java 接口与抽象类的区别
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- java 接口和抽象类的区别6_JAVA基础篇-接口和抽象类的区别
.前言 JAVA是一种面向对象语言,具备抽象(Abstract),封装(packing),继承(extends),多态(polymorphic)四大特性. 我们重点从oop思想∠来分析. .在面向对象 ...
最新文章
- 近一个月的学习总结(4.8—5.12)
- 第二次 图书助手冲刺第一天
- python学习笔记(十一)标准库sys
- 笨小猴(信息学奥赛一本通-T1407)
- 开源等于免费吗?用事实来说话
- python 打开excel并在屏幕上呈现_excel-检查文件是否在Python中打开
- html5实现单点登录,用 Authing 10分钟实现单点登录(SSO)
- HttpClientHelper的封装
- HTML + CSS 为何得不到编程界的认可?
- PHP 01 Apache HTTP
- hadoop核心框架简介
- js 单精度浮点数转10进制_js浮点数精度问题的前世今生?
- python复数的模
- matlab 矩阵满秩分解
- Oracle和SQL里面定义表别名
- Codeforces Round #807 (Div. 2) A-C题解
- KUKA基坐标创建步骤
- Twitter数据采集案例
- dropzonejs vue 使用_可能是史上最全面的学习资源 — VUE 开源库篇(一)
- 《构建之法》第一次作业
热门文章
- python设计模式7-桥接模式
- Linux篇 | 用户、组和权限(一)
- 技术周刊(2019-02-11 Serverless)
- Flutter安装和踩坑指南(windows)
- so库文件控制导出符号
- 分分钟实现底部导航栏:BottomNavigationBar快速集成
- [译] Subject 和 Observable + Observer 的混淆指北[ Android RxJava2 ] ( 这什么鬼系列 ) 第八话...
- 由for V.S. for each想到的
- 关于ShowModalDialog数据缓存的清除
- 数据驱动创新 融合引领变革 2017中国工业大数据大会·钱塘峰会今日在杭州国际博览中心顺利举行...