接口interface


前言

       在抽象类中,可以包含一个或多个抽象方法;但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”。

       接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做。

一、接口的定义

        Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口定义的一般形式为:

[访问控制符]interface <接口名> {
[public static final] 类型 符号常量名n = 常数;
[public abstract] 返回值类型  方法名([参数列表]);
      …
}

 注意:[ ]里面的内容可写可不写,因为接口的成员变量默认是public static final修饰的,也只能是public static final修饰,方法都是抽象方法

二、接口的特征

1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量

2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,

3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法

4、接口中没有构造方法,不能被实例化

5、一个接口不能实现(implements)另一个接口,但它可以继承(extends)多个其它的接口

6、Java接口必须通过类来实现它的抽象方法

7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类

8、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承

代码如下(示例):

三、接口的实现

首先,我们要先定义一个接口,这里我用一个名字为Usb的接口

public interface Usb {
	int a =10;
	void service();
}

现在我们已经定义了一个Usb接口,那现在我们来写一个名为UDisk的类来实现接口。

public class UDisk implements Usb {
	@Override
	public void service() {
		System.out.println("连接USB接口,开始传输数据");
	}
}

注意: 接口的实现使用implements关键字,这是与类的继承extends不同的;实现类中,必须重写接口中定义的方法!

使用时,如下代码方法:

public static void main(String[] args) {		 
		Usb uDisk =new UDisk();
		uDisk.service();
}

与类的继承相同的是:接口也可称做实现类(即本案例中的UDisk类)的父类,实现类对象自动转型为接口类型,多态机制同子父类继承时是同样的原理。

与类的继承不同的是:一个类可以实现多个接口

例如,我们再定义一个接口

public interface Storable {
	String doSave();
}

实现类UDisk

public class UDisk implements Usb, Storable {
	//实现接口中的方法
	@Override
	public void service() {
		System.out.println("连接USB接口,开始传输数据");
	}
	public String doSave(){
		String s="我可以存储512G的数据";
		return s;
	}
}

现在再使用时,UDisk类的对象即可以是Usb的,也可以是Storable类型的。也是说:一个类可以实现多个无关紧要的接口,这样就能实现多继承.

使用代码

public static void main(String[] args) {
        //做为Usb:
		Usb usb=new UDisk ();
		usb.service();
		//做为Storable:
		Storable store=new UDisk();
		System.out.println(store.doSave());
	}

四、接口的继承

在java中,类可以通过extends继承类,类可以通过implements关键字实现接口;接口与接口之间,也可以通过extends关键字实现继承,与类继承不同的是,一个接口同样可以继承多个接口,例如:

/**形状接口的定义:这个接口继承了另外两个接口*/
public interface NetJavaShape  extends OtherShape,java.io.Serializable{
	public final static  String compName="华信";	
	//接口中定义的方法
	void draw(int x1,int y1,int x2,int y2);
}

现在,我们的NetJavaShape继承了两个接口,(java.io.Serializeable接口是JDK中接供的一个接口,这个接口中没有任何方法实现,只是用来做标志用---实现了这个接口的类的对象可以被保存到文件中)。

如果某个类要实现NetJavaShape,就必须全部实现NetJavaShape接口中定义的方法和它的父接口中定义的方法。

五、面试题

父类和抽象类以及接口的侧重点是什么?

父类——侧重公共属性进行定义

抽象类——公共属性进行定义 公共行为、方法

接口——侧重的是行为定义

如何在接口中定义一个默认方法(实现类可以不重写这个方法)

使用default关键词,修饰方法,实现类可以不重写这个方法


总结

以上就是本文章对于Java的接口的基本概念的理解,具体可以自己在项目中实践。

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值