接口

接口

接口(interface)是一种特殊的抽象类,本质上不是一个类,里面只能包含常量和方法的定义(不允许实现),接口就是一套未实现方法的集合。
声明语法

[修饰符] 接口名称{

[常量定义]

[抽象方法的定义]

}
例如

public interface Flyable{
    //public static final String NAME = "bird";
    String NAME = "bird";
    
    //public abstract void fly();
    void fly();
}

定义了一个飞行类的接口,接口中有一个未实现的方法fly()
实现类

public class Bird implements Flyable{
    
    public void fly(){
        System.out.println("自由自在的飞翔");
    }
    
}

接口的实现要用implements关键字,实现接口必须要实现接口中未实现的方法。

注意事项
  1. 接口中只能存在常量和抽象方法(JDK1.8以前)
  2. 接口允许继承接口,并且能多继承
  3. 接口不允许继承任何类(包括抽象类)
  4. 接口允许有多个子类实现,并且子类可以同时实现多个接口
  5. 接口不属于类,因此不存在构造器,所以也无法实例化
    接口中实现多继承接口,语法为implements后面跟上接口名称,如
    implements 接口一,接口二,接口3{
    接口中的未实现方法
    }
接口和抽象类的区别
  1. 接口通常表示对行为(动词,或形容词)的抽象;抽象类一般为对具备相同的属性的类(名词)的抽象
  2. 接口中只允许常量和抽象方法;抽象类中具备普通的类所有特征,同时也支持抽象方法
  3. 接口允许多实现,接口允许继承多个接口;抽象类只能单继承
  4. 接口不存在构造器,无法实例化;抽象类虽然存在构造器,但是也无法实例
接口中的默认方法

某些情况下,可能实现类只需要对于接口中的部分方法实现而非所有方法,因此在这种需求下JDK新增了默认方法的设定,将一些实现类只需选择性实现的方法定义为default方法,这样一来,这些子类(实现类)就可以不一定实现,例如:

public interface CategoryManage {

	boolean add(Category c);
	
	//JDK8默认方法
	default boolean updateCname(Category c){
		return false;
	}
	
	//JDK8默认方法
	default boolean delete(int cid){
		return false;
	}
    
	ArrayList<Category> findAll();
	
	Category findById(int cid);
}

以上接口中updateCname和delete方法为默认方法,因此,子类可以无需实现这两个方法,如下:

public class CategoryManageImpl implements CategoryManage{

	@Override
	public boolean add(Category c) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public ArrayList<Category> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Category findById(int cid) {
		// TODO Auto-generated method stub
		return null;
	}

}
函数式接口与lamabda表达式

所谓的函数式接口就是接口中只存在一个未实现的方法。

lambda表达式
public class Test{
    public static void main(String[] args){
        Flyable f = ()->{};
    }
}

实际应用

public class TestLambda {
	public static void main(String[] args) {
		//ArrayList
		List<String> list = Arrays.asList("Tom","Jarray","Lily","Lilei","Hanmeimei"); 
		//lambda表达式实际使用
		list.forEach(n->System.out.println(n)); 
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值