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.在静态变量的声明处进行初始 ...
随机推荐
- es学习-java操作 2.4.0版本
package esjava; import org.elasticsearch.action.bulk.*;import org.elasticsearch.action.delete.Delete ...
- [GO]获取命令行参数
package main import ( "os" "fmt" ) func main() { list := os.Args n := len(list) ...
- Tango Java API常数
Tango Java API Constants常数 Constant Field Values常数字段值 Contents com.google.* com.google.* com.google. ...
- TunnelBroker for EdgeRouter 后记
最近入手了UBNT EdgeRouter X, 想着用 IPv6在路由上FQ,经过两天折腾,终于正常使用,留下点标记 供后来同学借鉴. TUNNEL的注册和配置,可以完全按这篇文章来: TunnelB ...
- delphi实现截全屏功能
procedure TForm1.Button10Click(Sender: TObject);var bmp: TBitmap; can: TCanvas; dc: HDC; Image1: TIm ...
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
- Backup--如何快速截断日志
--在SQL Server 2005 中,可用使用 BACKUP LOG WITH TRUNCATE_ONLY来迅速清理日志,该命令在 SQL Server2008 及更高版本上被去除. --BACK ...
- .net core MVC接受来自自前端的GET和POST请求方法的区别
小伙伴们都知道,常用的http请求有两种方式,即GET方法和POST方法,很多刚入门的童鞋难免都会有一个误区,是不是GET是从服务器上获取数据,POST是向服务器传送数据? 我的理解是:不论是GET还 ...
- IoC概要
控制反转基本上说的是功能调用者与功能实现者之间应该如何交互,即二者之间没有直接的强耦合(调用者new一个被调用者),而是都依赖同一个抽象,这个抽象规定了二者交互的接口.反转的意思是实现了依赖倒置,在程 ...
- 读取二元组列表,打印目录的层级结构-----C++算法实现
要求是--某个文件中存储了一个最多3层的层级结构,其中每个元素都是一个自然数,它的存储方法是一个二元组的列表,每个二元组的形式为:(元素,父元素).现在希望能够通过读取该二元组列表,打印出目录的层级结 ...