详解java接口基础知识附思维导图

接口:

官方的含义是---->java接口是一系列方法的声明,是一些方法特征的集合

疑问:

那为什么不用抽象类呢?把他们共有的方法集合起来放在一个抽象类里面,同样可以调用哇,但是反过来想一想如果这些方法,不是同一个类,就比如飞这个方法,飞机有飞这个方法,蚊子有飞这个方法,如果让他连同时继承拥有飞这个抽象类里面,是不符合单一职责原则的,所以我们可以提供一个飞的接口,飞机,蚊子来实现这个接口,那么飞机和蚊子就拥有飞的能力啦,这是我对接口的理解

因为最近在学习java 面向对象中的接口,就画了思维导图:

这是我对接口知识的基本总结

举一个案例希望大家能理解接口!

现在有一个需求,有一个门door类,有一个防盗门AntiTheDoor类,有一个铁门IronDoor类,因为防盗门和铁门都有门的属性,所以二者
继承门door类
他们都有一个功能,就是上锁与开锁,还有一个防盗门独有的功能,就是猫眼CatEye功能,猫眼功能是防盗门独有的方法,所以应当把
猫眼看成一个接口,防盗门可以实现它,这样我们用代码怎么来诠释呢(定义与实现)

父类door

public abstract class Door {

	/**
	 * 开门
	 */
	public abstract void open();
	/**
	 * 关门
	 */
	public abstract void close();

}

接口:只写应该具有的功能

public interface CatEye {
	/**
	 * 在使用接口的所有类中,需要实现接口中所有的方法
	 * 他们有这个功能,但是具体的实现放是不一样的,需要实现他的类在里面重新定义它新的生命,就比如,普通的防盗门里的猫眼就是简单的看
	 * 但是,还有一些猫眼的看有扫描的功能,不同的需求放在不同的类里面来具体的实现
	 */
	void look();
}
public interface Lock {

	/**
	 * 上锁
	 */
	void upLock();
	void downLock();
}

防盗门是门door的子类,继承父类开门关门的方法,同时拥有上锁,与猫眼的功能

public class AntiTheDoor extends Door implements Lock,CatEye{

	@Override
	public void look() {
		System.out.println("防盗门的猫眼,伸头瞪眼");

	}

	@Override
	public void upLock() {
		// TODO 自动生成的方法存根
		System.out.println("防盗门开锁:左转三圈");

	}

	@Override
	public void downLock() {
		// TODO 自动生成的方法存根
		System.out.println("防盗门的关锁,右转三圈");

	}

	@Override
	public void open() {
		// TODO 自动生成的方法存根
		System.out.println("防盗门的开门:用头顶");

	}

	@Override
	public void close() {
		// TODO 自动生成的方法存根
		System.out.println("防盗门的关门:用脚蹬");

	}

}

相比于防盗门,铁门只有上锁的功能

public class IronDoor extends Door implements Lock{

	@Override
	public void upLock() {
		System.out.println("铁门的开锁,右转三圈");

	}

	@Override
	public void downLock() {
		System.out.println("铁门的上锁,左转三圈");

	}

	@Override
	public void open() {
		System.out.println("铁门的开门用脚蹬");

	}

	@Override
	public void close() {
			System.out.println("铁门的关门方式,用头顶");
	}

}

测试类:

public class test {

	public static void main(String[] args) {
		AntiTheDoor atd = new AntiTheDoor();
		atd.upLock();
		atd.open();
		atd.close();
		atd.downLock();
	}
}

运行结果:

防盗门开锁:左转三圈
防盗门的开门:用头顶
防盗门的关门:用脚蹬
防盗门的关锁,右转三圈

一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以有具体不同的能力.

以上所述是小编给大家介绍的java接口基础知识详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 带你深入概括Java!六、方法和方法重载!(推荐)

    一. 掌握方法和参数语法和反回值语 方法的分类: – 1. 无参无返(没有参数列表,没有返回值)单纯的作为 功能代码的聚合使用 便于功能复用. – 2.无参有返(没有参数列表,有返回值)例如: 我需要每次生成一个随机卡号 – 3.有参无返(有参数列表 没有返回值) 适用于功能需要根据参数来进行计算的情况,但是计算的最终结果又无需返回处理 – 4. 有参有返(有参数列表,有返回值)适用于功能需要根据参数来进行计算的情况,而且最终的结果需要被我们拿到(返回处理) 方法的形参和实参: 形参 :是定义在

  • 浅谈Java中的参数传递问题

    /* 思考题1:看程序写结果,然后分析为什么是这个样子的.并画图讲解.最后总结Java中参数传递规律. Java中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响. 引用类型:形式参数的改变直接影响实际参数. */ class ArgsDemo { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); //a

  • 详解Java基础篇--面向对象1(构造方法,static、this关键字)

    面向对象,面向过程的区别.拿下五子棋来说: 面向过程分析: 开始游戏 黑棋先走 绘制画面 判断输赢 轮到白棋 绘制画面 判断输赢 返回步骤2 输出结果 面向对象分析: 黑白双方,双方行为是一模一样的 棋盘系统,负责绘制画面 规则系统,判断犯规.输赢 传统的面向过程编程是思考问题的解决步骤,这种思维方式适用于问题规模较小时.可是当问题规模大,要求程序有更好的可扩展性,能更快速地查错时面向对象设计思想就能体现出其优势.面向对象更接近人类地自然思维方式,将现实世界中的事物抽象为对象和对象的方法. 面向

  • Java的外部类为什么不能使用private和protected进行修饰的讲解

    Java的外部类为什么不能使用private和protected进行修饰 对于这个问题,一直没有仔细思考,今天整理一下: 对于顶级类(外部类)来说,只有两种修饰符:public和默认(default).因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置.因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default). 如果类使用了private修饰符,说明是个内部类.内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(p

  • 详解Java变量与常量

    一.常量 用final修饰(也称最终变量) 常量在声明时必须赋初值,赋值后不能再修改值 常量名通常用全大写字母表示 声明时需要添加final或static final类型修饰符,例如: private final int PI=3.141596; //常量,类加载时确定或者更靠后确定值 private static final int PI=3.14159;//静态常量(编译期常量),编译时就确定值(编译为class文件) 二.变量 1.变量类型不同,分配的内存类型也不同 2.无初始化成员变量的

  • 浅谈Java数值类型的转换与强制转换

    数值类型之间的转换 6个实心箭头箭头表示无信息丢失的转换; 3个虚箭头表示可能有精度损失的转换. 当使用上面两个数值进行二元操作时,先要将两个操作数转换为同一类型,然后再进行计算. 规则:`两个数中小类型的值将自动转换为大类型的值. 小转大可以,但是大转小会损失精度,则需要强制转换. 强制类型转换 语法格式 在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名. 例: double m = 9.99; int n = (int)m; 其中n的值为9. 强制类型转换通过截断小数部分将浮点值转换

  • Java Property类使用详解

    概念理解 Properties 继承于 Hashtable.表示一个持久的属性集,属性列表以key-value的形式存在,key和value都是字符串.Properties类被许多Java类使用.例如,在获取环境遍历时它就作为System.getProperties()方法的返回值.我们在很多需要避免硬编码的应用场景下需要使用Properties文件来加载程序需要配置的信息,比如JDBC.MyBatis框架等.Properties类则是Properties文件和程序的中间桥梁,不论是从prope

  • 详解java_ 集合综合案例:斗地主

    案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 案例分析 1.准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色 集合与数字集合嵌套迭代完成每张牌的组装. 牌由Collections类的shuffle方法进行随机排序. 2.发牌 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌. 3.看

  • 浅谈Java中格式化输出

    格式化控制台输出 要点提示: 在控制台上显示格式化输出:System.out.printf方法 常用的格式标识符 (图片来源: java核心技术卷1(第九版)) 格式标识符的解释 % 4 . 2 f 4为域宽度.输出的浮点数条目宽度至少为4,包括小数点和小数点后两位数字.这样,给小数点前分配了1位数字. 如果该条目小数点前的位数小于1,就在数字前面加空格. 如果该条目小数点前的位数大于7,则自动增加宽度. 2为精度().即想要输出的小数点的长度. f为转换码 指定宽度和精度的例子 举例 输出 %

  • Java异常处理的12条军规总结

    异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常. 异常发生的原因有很多,通常包含以下几大类: •用户输入了非法数据. •要打开的文件不存在. •网络通信时连接中断,或者JVM内存溢出. 这些异常有的是因为用

随机推荐