接口和内部类

1、接口
1.1 接口的特性
接口是用来描述类要实现的功能,接口可以声明而不实现方法,接口的特性主要有以下几点:

  • 不能使用new实例化接口,但可以声明接口类型变量,接口变量必须引用实现了接口的类实例。
  • 一个类只能扩展一个类,但可以实现多个接口,并且一个接口可以扩展多个接口。
  • 接口中不能包含实例域和不建议包含静态方法,可以包含常量。
  • 接口中的方法自动被标记为public,接口中的域自动被标记为public static final。

示例:声明compareTo方法的Compare接口

/*定义Compare接口*/
public interface Compare<T>{
	int compareTo(T other);
}
/*实现Compare接口*/
public class Employee implements Compare<Employee>{
	private double salary;
	public int compareTo(Employee other){
		return Double.compare(salary,other.salary);
	}
}

1.2 接口的默认方法
给接口方法提供一个默认实现(用default标记该方法),这样可以避免因一个类没有实现接口的全部方法而引发编译错误。

public interface MouseListener{
	default void mouseClicked(MouseEvent event){}
}

1.3 lambda 表达式
lambda表达式是一个可传递代码块,Java中的方法一般是封装在类中的,传递一个方法一般是传递一个类对象,再通过类对象调用方法,lambda表达式的出现使得代码块(方法)不需要通过对象传递,lambda表达式的语法为 :(形参列表)-> { 表达式 }

/**
* 比较两个字符串的长度
*/
(String first, String second) ->
{
	if(first.length() < second.length()) return -1;
	else if(first.length() > second.length)) return 1;
	else return 0;
}

lambda表达式可作为函数式接口,用于替代只有一个抽象方法的接口对象,增强代码可读性。

Arrays.sort(strings, (first, second)->{first.length()-second.length()}

方法引用:用现有的方法代替lambda代码块,格式:类名::方法名, String::compareToIgnoreCase等价于(x,y)->x.compareToIgnoreCase(y)

/*忽略大小写对字符串数组排序*/
Arrays.sort(strings, String::compareToIgnoreCase);

构造器引用:类名::new
变量作用域:lambda表达式可以访问外部变量,但这个外部变量必须是final的,即运行时不会被改变的,否则可能引发线程不安全。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值