提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着面向对象思想的发展,类的使用越来越方便,但是有时候类却不能实现对于方法的抽象,只能对于自己的属性的抽象。(所谓抽象简单理解为没有具体的实现)于是我们便在java语言中引出了一种接口的方式(interface)。(以下内容基于JAVA语言)
提示:以下是本篇文章正文内容,下面案例可供参考
一、interface是什么?
interface是一种接口的方式和抽象类很相似,并且接口可以实现多接口,但是在JAVA语言中类的继承不能多继承。interface是一种基于方法进行分类的,其主要目的是为了弥补类相对于方法的抽象。
用一个生动的例子来表示就是:
对于不同的动物都有吃的动作,但是一般的植物就没有吃的动作,有一些特殊的植物也有吃的动作。但是对于植物就不能把吃的动作写上去了,只有在写食人花之类的时候,把吃的动作补充就去也就是implements.这里当然也就需要我们的interface能完成了。
二、关于interface的使用
关于接口的使用我们这里使用一个登录的例子进行操作,关于不同的登录,实现登录不同,(比如手机短信登录,密码登录,以及扫码登录等等)所以我们在实现登录操作的时候就有了很多种方法。关于不同的方法的实现就可以implement一个interface
1.接口的格式
定义接口:
【public】interface 接口名【extends 父接口名】{}
实现接口:
【修饰符】class 类名 implements 接口名{}
代码例子1
//刚刚新建一个包,查阅资料发现包的创建不能出现关键词,下划线,空格
interface login_interface {
public void login(userlogin user,String code);//接口只能定义方法不能实现
}
//以下的三个类都是对于这个抽象类的实现
class PwdLogin implements login_interface{
@Override
public void login(userlogin user, String code) {
//在接口的继承里面必须要把全部的方法都实现了
System.out.println("pwd login");
if(user.pwd.equals(code)){
System.out.println("登录成功!!");
}else
System.out.println("密码错误");
}
}
class PhoneMsglogin implements login_interface{
@Override
public void login(userlogin user, String code) {
System.out.println("phone login");
if(user.pwd.equals(code)) System.out.println("登录成功!!");
else System.out.println("密码错误!");
}
}
class codelogin implements login_interface{
@Override
public void login(userlogin user, String code) {
System.out.println("code login");
if(user.pwd.equals(code))
{
System.out.println("登录成功!!");
}
else System.out.println("密码错误!");
}
}
2.用登录方法具体实现
在上面我们创建了三个具体的类去实现这个接口,但是没有体现出他们的具体作用,这里我们创建出一个用户分别使用不同的方法进行登录随后就会有不同的操作进行,可以直接体现interface的作用
代码例子2:
public class userlogin {
// 属性
String name;
int age;
String pwd;
/**
// 登录方法(如果只有一种登录方法可以直接不用继承该接口的方法就行)
public void login(String pwd){
if(pwd.equals (this.pwd)){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
}
**/
// 接口声明的 属性对象名 不能直接实例化
login_interface loginService;//这不是实例化,就像是一个指针指向这个类的对象
public void loginServiceLogin(String code){
loginService.login(this,code);
}
class Manage{
public static void main(String[] args){
userlogin user = new userlogin();
user.name = "张三";
user.age = 18;
user.pwd = "123456";
// 配置 登录方式
PhoneMsgLogin phlogin=new PhoneMsgLogin();
codelogin clogin=new codelogin();
PwdLogin pwdLogin = new PwdLogin();
user.loginService=pwdLogin;
// CodeLogin codeLogin = new CodeLogin();
// user.loginService=codeLogin;
user.loginServiceLogin ("123456");
user.loginService=clogin;
user.loginServiceLogin("123456");
user.loginService=phlogin;
user.loginServiceLogin("123456");//直接调用一种方法实现三种不用的方法的使用,这个是实现了程序的多态性
}
}
抽象类和接口之间的区别
实际点来说,一个抽象类不能实例化,因为“没有包含足够多的信息来描述一个具体的对象”。但终归属于类,所以仍然拥有普通类一样的定义。依然可以在类的实体(直白点就是能在{}里面)定义成员变量,成员方法,构造方法等。
而对于接口来说接口一般指的就是抽象方法和常量的集合(里面的数据以及方法只能是static和final类型)
总结
以上就是今天要讲的内容,关于interface的用法,我们在使用interface的时候需要的就是理解这个接口是为了实现什么样的方法,比如在java原有的包里面有一个ActionLitener接口,可以实现对于一个按钮的监听(监听器)。这个接口里面只有一个抽象方法就是actionPerformed就是用来实现这个功能的。