java 接口的学习
1 什么是接口
接口是一种引用数据类型。使用interface声明接口,形式: public interface 接口名称{}
1.1.1 接口的特性
[1] 接口中可以声明属性。接口中定义的所有变量都是static final类型的。
public interface MyInterface {
public static final String version = "1.0";
public int count = 10; // 默认是static final类型
}
[2] 接口中的方法都是公共抽象方法。
public interface MyInterface {
public abstract void showInfo();
void showInfo3(); // 推荐写法
public void showInfo2();
}
[3] (C)接口不能拥有构造方法,不能用于创建对象
【4] 接口可以多继承。一个接口可以继承多个其他接口(B)
public interface CInterface extends AInterface, BInterface { }
CInterface接口就具备了A、B接口中定义的抽象方法。
[5] (A) 一个类可以实现一个或者多个接口,该类称为接口的实现类(implement class).
实现类必须实现接口中的所有(抽象)方法
public class ImplClassA implements AInterface,BInterface{ @Override
public void showInfoA() {
System.out.println("实现接口中的showInfoA");
} @Override
public void showInfoB() {
System.out.println("实现接口中的showInfoB");
}
}
一个类只能继承一个父类,同时实现多个接口。继承在前,实现在后。
public class ImplClass3 extends AbsClass implements AInterface,BInterface{ @Override
public void showInfoA() {
// TODO Auto-generated method stub } @Override
public void showInfoB() {
// TODO Auto-generated method stub } @Override
public void showInfoC() {
// TODO Auto-generated method stub } }
总结:
实现类实现接口,必须实现接口中定义的抽象方法。
–>方法即行为,表示一种功能
–>接口定义了一套功能,实现类必须实现这些功能 –> 实现类的能力得到拓展。
1.2接口的应用
1.2.1 [1]接口表示一种能力
接口中定义的一些系列方法表示的是一种种的能力。接口让实现类实现这些能力,实现类的能力得到拓展和升级。
实现类根据自身特性实现接口中定义的方法。
package cn.sxt.interface03; /**
* 驾驶接口
*/
public interface DriveInterface {
/**
* 驾驶的方法
*/
public void drive();
} package cn.sxt.interface03; public class Student implements DriveInterface{
////…
public void learn(String cName) {
System.out.println(this.name+"正在学习"+cName);
} @Override
public void drive() {
System.out.println(this.name+"正在驾驶...");
} } package cn.sxt.interface03; public class Teacher implements DriveInterface{
/// … @Override
public void drive() {
System.out.println(this.name+"正在学习驾驶技术...");
System.out.println(this.name+"很快学会了飙车...");
} }
实现类Student具备了驾驶能力,实现类Teacher也具备了驾驶能力,原因是都实现了DriveInterface,两个实现类的能力得到了增强。
1.2.2 [2]接口实现多态(B)
package cn.sxt.interface4; public class Test01 {
public static void main(String[] args) { // 同一引用类型
USBInterface usbInterface = null; // 实例不同
usbInterface = new USBFan();
// 对同一方法的执行结果不同
usbInterface.connect(); usbInterface = new USBMouse();
usbInterface.connect(); usbInterface = new USBDisk();
usbInterface.connect();
}
}
接口实现多态: 接口类型 引用 实现类对象
继承实现多态: 父类类型 引用 子类对象
接口定义的方法被实现类实现,通过接口引用实现类时,调用接口中的方法时,执行的是实现类实现的方法。
实现类对象具备接口中定义的能力 是一种has a 关系
子类对象是一种父类类型 是一种is a 关系
1.2.3[3] 面向接口编程(A)
接口表示一种约定(协议),约定(规范)了实现类应该具备(has a)的能力。
理解:
=>实现类必须实现接口中所有的方法,所以接口规范了实现类的行为
=> 接口约定了实现类应该具备的行为。
面向接口编程
所谓面向接口编程,在程序设计时,只关心实现类具备什么能力,而不关心实现类如何实现这个能力。面向接口编程时,面向接口的约定而不考虑接口的具体实现。
也就是说,面向接口编程时,接口的定义方只关系实现类是否具备接口所定义的能力,而实现类如何被的该能力接口定义方一点都不关心。
package cn.sxt.interface06; public class Writer { // 预留墨盒接口
private InkBoxInterface inkBoxInterface; // 预留纸张接口
private PaperInterface paperInterface; public InkBoxInterface getInkBoxInterface() {
return inkBoxInterface;
} public void setInkBoxInterface(InkBoxInterface inkBoxInterface) {
this.inkBoxInterface = inkBoxInterface;
} public PaperInterface getPaperInterface() {
return paperInterface;
} public void setPaperInterface(PaperInterface paperInterface) {
this.paperInterface = paperInterface;
} public Writer(InkBoxInterface inkBoxInterface, PaperInterface paperInterface) {
super();
this.inkBoxInterface = inkBoxInterface;
this.paperInterface = paperInterface;
} public Writer() {
super();
} public void print(String content) {
System.out.println("打印机正在使用"+this.inkBoxInterface.getColor()+"颜色打印"+this.paperInterface.getSize()+"打印"+content);
}
}
1.2.3抽象类和接口的异同比较
• 抽象类和接口都是引用数据类型,他们都不能创建对象。
• 他们都可以定义抽象方法,都可以实现多态。但是抽象类可以定义非抽象方法,而接口中定义的都是抽象方法。
• 抽象类和接口都具有传递性。抽象类是单根性(单继承),而接口是多继承。
• 在概念上,都可以重写抽象方法。子类重写抽象类,实现类实现接口
• 抽象类和子类解决的是模块内的问题(代码重用,重写,多态)而接口解决的是模块间的问题 => 高内聚,低耦合。接口可以用解耦模块。
public class ImplClass3 extends AbsClass implements AInterface,BInterface{
@Override
public void showInfoA() {
// TODO Auto-generated method stub
}
@Override
public void showInfoB() {
// TODO Auto-generated method stub
}
@Override
public void showInfoC() {
// TODO Auto-generated method stub
}
}
java 接口的学习的更多相关文章
- java接口的学习笔记
1接口 接口是一个特殊的类,在JAVA中,接口是由抽象方法和全局敞亮组成. 在JAVA忠使用INTERFACE定义接口. public class InterfaceDemo { public sta ...
- 学习java接口知识
学习java接口知识 //一个类最多只能有一个直接的父类.但是有多个间接的父类. java是单继承. class ye_01{ String name; } class fu_01 extends y ...
- Java学习之Java接口回调理解
Java接口回调 在Java学习中有个比较重要的知识点,就是今天我们要讲的接口回调.接口回调的理解如果解释起来会比较抽象,我一般喜欢用一个或几个经典的例子来帮助加深理解. 举例:老板分派给员工做事,员 ...
- hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口
文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访 ...
- java接口调用——webservice就是一个RPC而已
很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- Java程序员学习之路
1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...
- Java虚拟机JVM学习04 类的初始化
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...
随机推荐
- java Long、Integer 、Double、Boolean类型 不能直接比较
测试: System.out.println(new Long(1000)==new Long(1000)); System.out.println(new Integer(1000)==new In ...
- 【转载】MySQL常用系统表大全
转载地址:http://blog.csdn.net/xlxxcc/article/details/51754524 MySQL5.7 默认的模式有:information_schema, 具有 61个 ...
- 浅说Java反射机制
工作中遇到,问题解决: JAVA语言中的反射机制: 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的 ...
- 编写高质量代码改善C#程序的157个建议——建议143:方法抽象级别应在同一层次
建议143:方法抽象级别应在同一层次 看下面代码: class SampleClass { public void Init() { //本地初始化代码1 //本地初始化代码2 RemoteInit( ...
- windows在python基础上安装pip
首先你必须已经安装了python,并且配置好环境 键入pip 复制https://bootstrap.pypa.io/get-pip.py的内容并创建get-pip.py文件(该文件的内容就是刚刚复制 ...
- 使用jasmine-node 进行NodeJs单元测试 环境搭建
关于jasmine就不多说了,关于语法请参加官方文档.http://pivotal.github.io/jasmine/ 关于NodeJS的单元测试框架有多种,如果要在NodeJS中使用jasmine ...
- 如何让X5发现你的手机
1. 手机开启 USB 调试.不用 ROOT.2. 装驱动.(问题就在这里) 首先要装对驱动,如果你的驱动叫 MyHTC,请立即删除. 找个 手机助手.例如 百度 腾讯 360 等等.反正不论你是谁的 ...
- Backup--完整备份会打破现有的日志备份链么?
--问题描述: --对数据库有一个周期性数据库备份和事务日志备份的维护计划,在维护计划外有工作人员对数据库进行完整备份,该备份会打乱现有的日志备份链么? --===================== ...
- Ubuntu 安装 Memcached
直接使用命令 sudo apt-get install Memcached 进行安装 安装完, 默认只能本地连接,需要修改一下配制文件,打开 /etc/Memcached.conf 文件, 找到一个 ...
- Question | 网站被黑客扫描撞库该怎么应对防范?
本文来自网易云社区 在安全领域向来是先知道如何攻,其次才是防.针对题主的问题,在介绍如何防范网站被黑客扫描撞库之前,先简单介绍一下什么是撞库. 撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对于 ...