提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、接口的介绍
1.接口概念
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解)
2.接口的特点
就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。
接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。
一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。
如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类。(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类)
一个JAVA库中接口的例子是:Comparator 接口,这个接口代表了“能够进行比较”这种能力,任何类只要实现了这个Comparator接口的话,这个类也具备了“比较”这种能力,那么就可以用来进行排序操作了。
3.为什么要用接口
接口被用来描述一种抽象。
因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限。
接口也被用来实现解耦。
接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的。
。
二、接口的语法实现
1.
为了声明一个接口,我们使用interface这个关键字,在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的,因此,接口并不用管具体的实现。接口中的属性默认为Public Static Final.一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。
一个简单的接口就像这样:拥有全局变量和抽象方法。
为了实现这个接口,我们使用implements关键词去实现接口:
其中testClass类实现了我们上面刚才定义的 in1 这个接口,既然你要实现接口,也就是实现接口代表的一种能力,那么你就必须去实现接口给你规定的方法,只有把接口给你规定的抽象方法都给实现了,才承认你这个类实现了这个接口,实现了这个接口代表的某种功能。上图实现了接口中规定的display()方法。
写一个测试类,用来测试一下我们刚才实现的这个接口,因为testclass类的对象t实现了接口规定的display方法,那么自然而然就可以调用display()方法咯。
2.接口的进一步理解
我们知道,如果某个设备需要向电脑中读取或者写入某些东西,这些设备一般都是采用USB方式与电脑连接的,我们发现,只要带有USB功能的设备就可以插入电脑中使用了,那么我们可以认为USB就是一种功能,这种功能能够做出很多的事情(实现很多的方法),其实USB就可以看做是一种标准,一种接口,只要实现了USB标准的设备我就认为你已经拥有了USB这种功能。(因为你实现了我USB标准中规定的方法),下面是具体的例子:
先声明USB接口:其中规定了要实现USB接口就必须实现接口规定实现的read( )和write( )这两个方法。
然后在写一个U盘类和一个键盘类,这两个类都去实现USB接口。(实现其中的方法)
这是U盘的具体实现。
那么,现在U盘和键盘都实现了USB功能,也就是说U盘和键盘都能够调用USB接口中规定的方法,并且他们实现的方式都不一样。
我们在写一个测试,来看看具体的实现:
三.关于接口的几个重点
java中 接口和类是并列的两个结构 public static final 书写时可以省略不写 全局常量 public abstract 抽象方法 书写时可以省略不写 接口通过类去实现(implements)的方式去使用 java类可以实现多个接口 打破了java的单继承性 用,连接 先继承父类 class AA extends BB implements CC,DD,EE,FF 接口与接口之间是继承 并且可以多继承 接口实际上可以看作是一种规范
多态性的体现:(以及匿名操作)
package com.atguigu.Java2;
//多态性
public class USBTest {
public static void main(String[] args) {
USBTest usbTest = new USBTest();
//1.创建了接口的非匿名实现类的非匿名操作
Flash flash = new Flash();
usbTest.transferData(flash);
//2.创建了接口的非匿名实现类的匿名操作
usbTest.transferData(new Flash());
//3.创建了接口的匿名实现类的非匿名操作
USB phone = new USB() {
@Override
public void start() {
System.out.println("飞机开始工作");
}
@Override
public void stop() {
System.out.println("飞机结束工作");
}
};
usbTest.transferData(phone);
//4.创建了接口的匿名实现类的匿名操作
usbTest.transferData(new USB() {
@Override
public void start() {
System.out.println("开始工作");
}
@Override
public void stop() {
System.out.println("结束工作");
}
});
}
public void transferData(USB usb){
usb.start();
usb.stop();
}
}
interface USB{
//常量 定义了 长 宽 最大 最小的传输速度等
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
System.out.println("u盘开始工作");
}
@Override
public void stop() {
System.out.println("u盘结束工作");
}
}
四。代理模式介绍
代理模式的优点之一就是安全性,以翻墙为例,在翻墙的时候用到的代理服务器,就是利用境外的服务器代替我们访问外网数据,并且不暴露我们的真实IP,暴露的是代理服务器的IP。
在java实现代理模式中,假如说B来代理A,A叫做被代理类,B叫做代理类,我们要保护的是被代理类。
一般是在代理类B中创建一个 接口的属性 和一个以接口为参数的构造器,利用接口的多态性,在创建代理类的时候给构造器赋被代理类的地址。
举例:
public class StaticProxyTest {
public static void main(String[] args) {
Proxy proxy = new Proxy(new Deng());
proxy.sing();
}
}
//接口--明星
interface Star{
void confer();//面谈
void singContract();
void bookTicket();
void sing();
}
//明星本人--被代理类
class Deng implements Star {
@Override
public void confer() {
}
@Override
public void singContract() {
}
@Override
public void bookTicket() {
}
@Override
public void sing() {
System.out.println("邓浩:来一首走马");
}
}
//经纪人--代理类
class Proxy implements Star{
private Star star;
public Proxy(Star star) {
this.star = star;
}
@Override
public void confer() {
System.out.println("经纪人帮我谈");
}
@Override
public void singContract() {
System.out.println("经纪人帮我签");
}
@Override
public void bookTicket() {
System.out.println("经纪人帮我定");
}
@Override
public void sing() {
star.sing();
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了接口的基础介绍及简单代理模式的应用