【Java基础笔记】接口与抽象类+字符串拼接过程+lambda表达式

接口interface

接口用来描述类具有什么功能,而不是提供每个功能的具体实现。抽象类中也不用实现方法

抽象类中的方法不一定都是抽象方法,可以包含具体数据和具体方法,但只要有抽象方法,类就是抽象类。抽象类相当于一种“占位”,抽象方法的具体实现交由子类去实现。
关于子类:如果抽象类中定义了全部的抽象方法,子类可以不是抽象的。但如果抽象类中定义部分抽象类方法或不定义抽象类方法,子类就必须标记为抽象类。

接口不能被实例化,抽象类也不能。如果定义了抽象类的对象变量,那么它只能引用非抽象子类的对象。接口变量必须引用实现了接口的类对象
接着说接口,“如果类遵循某个接口,就履行这项服务”。
例如:Arrays类中的sort方法可以对对象数组进行排序,但是需要对象所在的类实现了Comparable接口才能用这个方法。

//改进为泛型类型
public interface Comparable<T>{
	int compareTo(T other);
}

所以,实现Comparable接口的类包含compareTo()这个方法。并且,参数必须一致,返回类型也要一致
调用```x.compareTo(y)``时,方法比较两个对象的内容并且返回:

  • 负数,x<y
  • 0,x=y
  • 正数,x>y

java用PriorityQueue可以实现小根堆,如果要大根堆,则需要重写比较器:

   //lambda表达式写法
   PriorityQueue<Integer> a = new PriorityQueue<>((x,y)->(y-x));
   //重写比较器(匿名内部类)
   a = new PriorityQueue<>(new Comparator<Integer>(){
   	@Override
   	public int compare(Integer o1, Integer o2){
   		return o2-o1;
   	}
   });

接口类似于没有实例域的抽象类。类实现接口的时候除了implements关键字还需要对接口中的所有方法进行定义(确保拥有该方法)。
接口中的所有方法自动属于public。所以在接口方法中没有把compareTo声明为public,但是在实现接口时就必须把方法声明为public了,否则编译器会默认为类的访问属性,提出严格访问权限警告。

总结 抽象类和接口的区别

1.设计思想:抽象类是对子类通用特性进行抽象,接口是对行为进行抽象。
2.扩展:抽象类只能继承一个,但接口可以实现很多个,接口可以继承接口。
3.修饰符:接口默认修饰符是public,抽象方法可以有 public、protected 和 default 这些修饰符
4.方法:抽象类可以有非抽象的方法,接口中所有方法不能实现(从8开始可以用default修饰方法,提供默认实现,或者就是声明为默认方法什么也不做。9开始允许定义私有方法)

字符串拼接实现

  1. 如果是有对象参与的字符串拼接
String tmp = "ac";
String s = tmp+"ab";
//实现
String s = new StringBuilder(String.valueOf(obj)).append("ab").toString();

创建的s对象在运行期创建,存储于堆,使用StringBuilder来实现拼接。
2. 如果是单纯字面量的拼接
String s = "aa"+"bb";
那么就创建的是直接量,在编译期就会存储到常量池中。

Lambda表达式

参数->表达式
()->{}

只在某些分支(if)返回值而其它分支不返回值是不合法的

方法引用(method reference):

System.out::println
//等价于
x->System.out.println(x);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值