Java面向接口编程【精品博客】
我们从生活中去理解面向接口编程,以下举例四个案例来理解:
案例一(汽车案例):
/**
* 汽车标准接口
* @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面向接口编程【精品博客】的更多相关文章
- 2015-2016-2 《Java程序设计》 学生博客及Git@OSC 链接
2015-2016-2 <Java程序设计> 学生博客及Git@OSC 链接 博客 1451 20145101王闰开 20145102周正一 20145103冯文华 20145104张家明 ...
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...
- JAVA课程设计——团队博客
JAVA课程设计--团队博客 1. 团队名称.团队成员介绍(需要有照片) 团队名称:"小羊吃蓝莓"小游戏 团队成员介绍: 成员 班级 学号 廖怡洁 网络1513 201521123 ...
- JAVA课设个人博客--多源数据教学管理系统
JAVA课设个人博客--多源数据教学管理系统 1.团队课程设计博客链接 https://www.cnblogs.com/hq9-/p/10278470.html 2. 个人负责模块或任务说明 主要模块 ...
- 《Java 程序设计》团队博客第十一周(第一次)
<Java 程序设计>团队博客第十一周(第一次) 团队项目 1.项目内容.目标 项目内容 本组的团队项目准备实现一个有关于大富翁有的游戏程序. 大富翁游戏,以经营权为主要的游戏方式,通过购 ...
- java高并发_博客-网址-资料 推荐
大概说一下自己作为入门学习java高并发的博客地址,很不错在自己的博客里记录一下:如果能有刷到我的博客的骚年,又刚好想了解java高并发,强烈推荐看看 地址:http://www.itsoku.com ...
- Java集合 - 明的博客
"In this world there are only two tragedies. One is not getting what one wants, and the other i ...
- Java电话监听器【精品博客】
模拟拨打电话,接听电话,挂断电话,拨打为空号,等等,这些动作用Java接口监听的方式来完成,主要是为了训练使用接口监听回调: /** * 业务场景一: * [萍萍]--->请输入手机号码进行拨打 ...
- JAVA课程设计个人博客 学生成绩管理 201521123023 戴建钊
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现随机生成10万个学生及其姓名.学号 ...
随机推荐
- Andriod Studio adb 安装应用
原文链接:https://blog.csdn.net/u014608640/article/details/51833304 下面的命令安装.重新安装和卸载应用程序. 安装:adb -s HT9BYL ...
- hdoj1087 (DP--LIS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 思路:这题很简单了,纯LIS的解法,没有一点变形,由于数据小,使用O(n^2)LIS解法就足够了 ...
- tf.cast()
一.函数 tf.cast() cast( x, dtype, name=None ) 将x的数据格式转化成dtype.例如,原来x的数据格式是bool, 那么将其转化成float以后,就能够将其转化成 ...
- 对象之int介绍
#Auther Bob #--*--conding:utf-8 --*-- #创建两个int的对象,age1和age2 age1 = 10 age2 = int(1) #查看对象的类 print(ty ...
- ROS两种workspace :overlay rosbuild_ws->catkin_ws->ROS库,
概念 ROS里面有一系列概念,作为初学者,最先接触的概念无非是node, package和workspace. node node是ROS里面最小的执行单位,你可以把node看成是一个main函数,当 ...
- jDeveloper运行慢
最近在使用 Jdeveloper 10.1.3.3 版本时发现速度奇慢无比,后经Google,发现如下解决方案:在 jdev.conf 文件的末尾加上如下两行,速度即可得到显著的提高. AddVMOp ...
- winform弹出文件和目录选择框
目录选择: FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径&quo ...
- Laravel 5.5 Api
Laravel api token验证使用方法 从 Laravel 5.2 开始, Laravel 的将路由的配置进行了分拆, 在 routes 目录下有 web.php 和 api.php 两个路由 ...
- com.opensymphony.xwork2.config.ConfigurationManager.addConfigurationProvider
一月 31, 2016 5:06:31 下午 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting f ...
- Tomcat连接池配置
今日做了个小网站,数据量不大,但当发布到虚拟主机上之后,接连不断的遇到各种问题. 被折磨了数日后,在网上查了大量的相关资料,现总结如下. 一.项目在上传到远程服务器的过程中,有可能丢失文件,或文件内容 ...