java 接口用法(通俗易懂)
来源:互联网 发布:php max函数 编辑:程序博客网 时间:2024/05/22 06:17
以前我一直没有搞懂接口的工作流程,直到看了下面这篇文章:
很形象的接口的使用——针对初学者
里氏代换原则是什么?听起来很高深,不过我们也不是什么学院派,就不讲大道理了,直接拿个例子来说一下。
我们拿人和程序员举个例子。人是一个大类,程序员是继承自人的子类。看看这句话:人需要吃饭。这句话我们把“人”换成“程序员”,就是:程序员需要吃饭,这样换不会有什么问题。现在我们反过来,把“程序员可以用计算机写程序”里边的程序员换成“人”,就是:人可以用计算机写程序。这样就不一定正确了,否则问题可就大了,我们这些程序员只怕没得饭吃了。
这个就是里氏代换原则:使用父类的地方肯定可以用它的一个子类来替换掉,但是使用一个子类的时候用它的父类来替换就不一定正确了。
好,现在我们回到程序设计里边来。
看看下面的程序:
一个学校里边,有两种人:学生、老师。他们都要吃饭和睡觉。
public interface 人{
void 吃饭();
void 睡觉();
}
public class 学生 implements 人{
public void 吃饭(){
//去食堂吃饭
}
public void 睡觉(){
//回寝室睡觉
}
...//其他特有方法
}
public class 老师 implements 人{
public void 吃饭(){
//回家吃饭
}
public void 睡觉(){
//回家睡觉
}
...//其它特有方法
}
public class 学校{
public void 开饭(人 ren){
ren.吃饭();
}
public void 放学(人 ren){
ren.睡觉();
}
}
这里就用到了里氏代换原则,"开饭()"和"放学()"的参数都是人,那么这个地方如果换成学生和老师肯定也可以。
人 a = new 学生();
学校.开饭(a);
学校.放学(a);
这样执行的结果就是学生回寝室吃饭。
人 b = new 老师();
学校.开饭(b);
学校.放学(b);
这样执行的结果就是老师回家吃饭。
为什么要这样写呢?这样写有什么好处呢?
我在开饭的时候完全可以直接调用"学生.吃饭();"、"老师.吃饭();"啊。
接着看。
有一天,学校里来了第三种人,家长。
家长既不是去寝室睡觉也不是回家睡觉,而是旅馆睡觉,既不是去食堂吃饭也不是回家吃饭,而是去下馆子。
这个时候学校这个系统该怎么处理呢?
如果原来没有定义"人"这个接口那就麻烦啦,所有用到人的地方代码都要改。
现在不一样了,我可以直接定义一个类:家长,这个类实现人这个接口就可以了。
好,看代码:
public class 家长 implements 人{
public void 吃饭(){
//下馆子
}
public void 睡觉(){
//去旅馆睡觉
}
...//其它特有方法
在调用的时候不需要修改任何代码,还和原来一样:
人 c=new 家长();
学校.开饭(c);
学校.放学(c);
轻松搞定家长的食宿问题!
这样一来学校来再多的客人都没关系啊,绝对可以应付自如,这也就是传说中的可扩展性!
不知道初学者看到这里是不是能够明白接口的作用。如果你还不明白,那么你把人这个接口去掉,自己写一个学校开饭和放学的类,然后再加一个家长这个新新人类进去,看看你的代码是什么样子的,再想一下在人口这么多的中国,万一哪天你的学校里来了成千上万个新新人类你该怎么办!
转自:http://254567851.blog.163.com/blog/static/10578497420106208461637/
- java 接口用法(通俗易懂)
- C#接口详细解释和用法(通俗易懂)
- 通俗易懂多线程(JAVA)
- ltrim用法(通俗易懂版)
- Java:泛型简明教程(通俗易懂)
- 通俗易懂解释java反射机制(一)
- 转载:JAVA内存介绍(非常通俗易懂)
- 通俗易懂解释java反射机制(一)
- 通俗易懂解释java反射机制(二)
- java 回调(通俗易懂的解析)
- 通俗易懂解释java反射机制(一)
- Java ThreadFactory接口用法
- JAVA接口的用法
- java 多线程 cpu 通俗易懂
- java 反射详解通俗易懂
- java 反射详解通俗易懂
- java nio详解(说的通俗易懂,好文章)
- java中线程同步的理解(非常通俗易懂)
- 万维网www的历史、发展、特点和相关协议详解
- linux配置mysql主从--master and slave
- 下代MapReduce预览
- ecshop红包指定某些商品不能使用 修改步骤
- JS省市二级联动网页特效菜单
- java 接口用法(通俗易懂)
- public继承后,父类与子类访问隐藏
- 二叉树
- javaEE版 oauth2 第三方登陆新浪微博
- Oracle Database PSU/CPU安装---第三步的确容易被忽略
- iframe自适应高度的多种方法方法小结
- 如何查看SQL SERVER数据库当前连接数
- LTP安装和使用
- android多点触控的使用