我们从生活中去理解面向接口编程,以下举例四个案例来理解:


案例一(汽车案例):

/**
* 汽车标准接口
* @author Liudeli
*/
public interface ICar { /**
* 打印出汽车的拍照颜色即可
*/
public void car(); }
/**
* 奥迪车对象
* @author Liudeli
*/
public class Audi implements ICar { public void car() {
// TODO Auto-generated method stub
System.out.println("奥迪A3 红色...");
} }
/**
* 奔驰车对象
* @author Liudeli
*/
public class Benz implements ICar { public void car() {
// TODO Auto-generated method stub
System.out.println("奔驰A1 白色...");
} }
/**
* 宝马车对象
* @author Liudeli
*/
public class BMW implements ICar { public void car() {
// TODO Auto-generated method stub
System.out.println("宝马A6 黑色...");
} }
/**
* 汽车专卖店
* @author Liudeli
*/
public class CarMonopoly { /**
* 打印汽车名和颜色
* @param car 传入接口(可以达到父类的引用指向子类的对象)
*/
public void print(ICar car) {
car.car();
} }
/**
* 测试程序
* @author Liudeli
*/
public class Main { public static void main(String [] args) {
// 获取汽车专卖店
CarMonopoly carMonopoly = new CarMonopoly(); carMonopoly.print(new Audi()); carMonopoly.print(new Benz()); carMonopoly.print(new BMW());
} }

运行结果:


案例二(动物案例):

/**
* 定义动物接口
* @author Liudeli
*/
public interface IAnimal { /**
* 定义动物叫的行为
*/
public void call(); }
/**
* 定义猫对象
* @author Liudeli
*/
public class Cat implements IAnimal { public void call() {
System.out.println("喵喵喵...");
} }
/**
* 定义狗对象
* @author Liudeli
*/
public class Dog implements IAnimal { public void call() {
System.out.println("汪汪汪...");
} }
/**
* 定义鹅对象
* @author Liudeli
*/
public class Goose implements IAnimal{ public void call() {
System.out.println("鹅鹅鹅...");
} }
/**
* 此类为动物管理类
* @author Liudeli
*/
public class AnimalManager { /**
* 执行叫的行为
* @param animal 传入动物接口(父类的引用指向子类的对象)
*/
public void call(IAnimal animal) {
animal.call();
} }
/**
* 测试程序
* @author Liudeli
*/
public class Main { public static void main(String[] args) { AnimalManager animalManager = new AnimalManager(); animalManager.call(new Dog()); animalManager.call(new Goose()); animalManager.call(new Cat());
} }

运行结果:


案例三(城市案例):

/**
* 定义城市的接口
* @author Liudeli
*
*/
public interface ICity { /**
* 显示当前城市,显示城市特点
*/
public void city(); }
/**
* 定义北京对象
* @author Liudeli
*
*/
public class Beijing implements ICity { public void city() {
// TODO Auto-generated method stub
System.out.println("北京雾霾很严重...");
} }
/**
* 定义上海对象
* @author Liudeli
*
*/
public class Shanghai implements ICity { public void city() {
// TODO Auto-generated method stub
System.out.println("上海很豪华...");
} }
/**
* 定义深圳对象
* @author Liudeli
*
*/
public class Shenzhen implements ICity { public void city() {
// TODO Auto-generated method stub
System.out.println("深圳天气晴空万里...");
} }
/**
* 此类为显示城市管理类
* @author Liudeli
*
*/
public class ShowCity { /**
* 初始化单例模式
*/
private static ShowCity showCity = null; public static ShowCity getInstance() {
if (null == showCity) {
synchronized (ShowCity.class) {
showCity = new ShowCity();
}
}
return showCity;
} /**
* 显示城市
* @param city 传入城市接口(父类的引用指向子类的对象)
*/
public void show(ICity city) {
city.city();
} }
/**
* 测试程序
* @author Liudeli
*
*/
public class Main { public static void main(String[] args) { ShowCity instance = ShowCity.getInstance(); instance.show(new Shanghai()); instance.show(new Beijing()); instance.show(new Shenzhen()); } }

运行结果:




案例四(PCI案例):

目前自认为这是我写的比较通俗易懂,体现出面向接口编程意义的案例:

/**
* 电脑主板里面有插槽(插槽就是PCI)
* 注意:这些插槽是一种标准,
* 支持声卡,网卡,显卡...
* @author Liudeli
*
*/
public interface PCI { /**
* 插入状态
*/
public void insert(); /**
* 拔出状态
*/
public void pull(); }
/**
* 定义声卡对象
* @author Liudeli
*
*/
public class SoundCard implements PCI { public void insert() {
System.out.println("声卡已经插入成功了...");
} public void pull() {
System.out.println("声卡被人拔出去了...");
} }
/**
* 定义网卡对象
* @author Liudeli
*
*/
public class NetworkCard implements PCI { public void insert() {
System.out.println("网卡已经插入成功...");
} public void pull() {
System.out.println("网卡已经被人拔出去了...");
} }
/**
* 定义显卡对象
* @author Liudeli
*
*/
public class Graphics implements PCI { public void insert() {
System.out.println("显卡已经插入成功了...");
} public void pull() {
System.out.println("显卡被人给拔出去了...");
} }
/**
* 电脑主板
* @author Liudeli
*
*/
public class MainBoard { /**
* 主板的卡槽
* @param pci 插入支持标准卡槽的具体对象(父类的引用去指向子类的对象来调用具体实现)
*/
public void cardSlot(PCI pci) {
pci.insert();
pci.pull();
} }
/**
* 测试程序
* @author Liudeli
*
*/
public class Main { public static void main(String[] args) { // 拿一块主板过来(我要自己组装台式机电脑)
MainBoard mainBoard = new MainBoard(); // 给主板插好声卡(安装好声卡才可以听歌)
mainBoard.cardSlot(new SoundCard()); // 给主板插好显卡(安装好的显卡可以玩游戏舒服)
mainBoard.cardSlot(new Graphics()); // 给主板插好网卡(安装好网卡才可以插入网线,才可以上网)
mainBoard.cardSlot(new NetworkCard());
} }

运行结果:


Project结构图:


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,

刘德利CSDN博客, http://blog.csdn.net/u011967006

Java面向接口编程【精品博客】的更多相关文章

  1. 2015-2016-2 《Java程序设计》 学生博客及Git@OSC 链接

    2015-2016-2 <Java程序设计> 学生博客及Git@OSC 链接 博客 1451 20145101王闰开 20145102周正一 20145103冯文华 20145104张家明 ...

  2. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  3. JAVA课程设计——团队博客

    JAVA课程设计--团队博客 1. 团队名称.团队成员介绍(需要有照片) 团队名称:"小羊吃蓝莓"小游戏 团队成员介绍: 成员 班级 学号 廖怡洁 网络1513 201521123 ...

  4. JAVA课设个人博客--多源数据教学管理系统

    JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...

  5. 《Java 程序设计》团队博客第十一周(第一次)

    <Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...

  6. java高并发_博客-网址-资料 推荐

    大概说一下自己作为入门学习java高并发的博客地址,很不错在自己的博客里记录一下:如果能有刷到我的博客的骚年,又刚好想了解java高并发,强烈推荐看看 地址:http://www.itsoku.com ...

  7. Java集合 - 明的博客

    "In this world there are only two tragedies. One is not getting what one wants, and the other i ...

  8. Java电话监听器【精品博客】

    模拟拨打电话,接听电话,挂断电话,拨打为空号,等等,这些动作用Java接口监听的方式来完成,主要是为了训练使用接口监听回调: /** * 业务场景一: * [萍萍]--->请输入手机号码进行拨打 ...

  9. JAVA课程设计个人博客 学生成绩管理 201521123023 戴建钊

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现随机生成10万个学生及其姓名.学号 ...

随机推荐

  1. Linux就业技术指导(一):简历撰写及面试筹备要领

    一,开场 二,模型 三,目标选材 3.1 什么是目标选材 简单说就是确定一个候选人是否符合某一个工作岗位要求的整个流程.这是对招聘方的一个培训,应聘方如果掌握了,就知道应该怎样正确的去应聘工作. 3. ...

  2. JVM7、8详解及优化

    一.引言:永久代为什么被移出HotSpot JVM了? 详见:JEP 122: Remove the Permanent Generation 原因主要有两个: 1.由于Permanent Gener ...

  3. while循环出现的问题

    1 int c = 0; while(c<=100) c++ } 自己看了很久没看出来,后来请教同学才知道,变量g是不能写在一开始的,因为while循环只是循环自己的那个花括号内的指令,不会循环 ...

  4. luoguP1080 国王游戏 (贪心+高精度)

    题目链接:https://www.luogu.org/problemnew/show/P1080 参考:https://www.luogu.org/problemnew/solution/P1080 ...

  5. C++重载、重写(覆盖)、隐藏

    类成员函数中重载/重写(覆盖)/重定义(隐藏)的区别? 答:分别简单讲述一下函数重载,函数覆盖,函数隐藏的概念与特征: 函数重载:重载函数通常用来命名一组功能相似的函数 1.函数要在相同的类域 2.函 ...

  6. struts框架问题四之获取到值栈的对象

    4. 问题四 : 如何获得值栈对象 * 获得值栈对象 有三种方法 * ValueStack vs1 = (ValueStack) ServletActionContext.getRequest().g ...

  7. SSL - 简介

    一.密码技术 要了解SSL协议,首先要了解:加密算法.消息摘要算法(又称为哈希算法Hash),数字签名等概念.这些技术每个都可以写出一整本的书,它们结合在一起,提供了保密性.完整性和身份验证的功能. ...

  8. 20172325 2017-2018-2 《Java程序设计》第七周学习总结

    20172325 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 1.创建子类 (1) 子类是父类更具体的版本,但子类的实例化不依赖于父类: (2) 继承有单 ...

  9. laravel在控制器中赋值给视图

    1.控制器 2.视图

  10. 深入浅出 JMS(四) - ActiveMQ 消息存储

    深入浅出 JMS(四) - ActiveMQ 消息存储 一.消息的存储方式 ActiveMQ 支持 JMS 规范中的持久化消息与非持久化消息 持久化消息通常用于不管是否消费者在线,它们都会保证消息会被 ...