1)接口不是类,而是对希望符合这个接口的类的一组需求;
2)接口中的方法都自动是 public 的,不需要显式使用 public 关键字。实现该接口的类中的实现方法必须带上 public 关键,不然编译报错;
3)接口中不能有属性字段,但是可以有常量字段。接口中的字段默认是 public static final 修饰的,所以不需要显式使用这些关键字;
4)不能使用 new 操作符去实例化一个接口,因为接口不是类;
5)接口变量,类似对象变量,只能引用实现了该接口的类的对象;
6)可以使用 instanceof 来判断对象所属的类是否实现了指定接口,类似用 instanceof 判断对象是否是指定类的对象;
7)一个类只能继承一个父类,但是可以实现多个接口;
1、为什么有了抽象类还要有接口?
答:类只能继承一个父类,但是可以实现多个接口;
2、接口中可以实现 static 静态方法
3、接口中可以实现 default 默认方法
1)使用 default 关键字;
2)默认方法表示的是该接口的默认实现,在实现类中可以不用实现该方法了,默认就能用;
3)在接口中的默认方法可以调用该接口中其他的未做默认处理的方法。在调用该接口的实现类的默认方法时,默认方法调用的非默认方法是在实现类中的方法实现;
4、解决默认方法冲突
1)情况一:超类定义了一个方法,接口也实现了一个同名同参的默认方法;
类优先原则,java 设计中会把接口中的同名同参的默认方法忽略掉;
2)情况二:类实现了两个接口,每个接口都实现了同名同参的默认方法;
存在二义性问题,此时实现类编译会报错,需要在实现类中覆盖这个方法,覆盖的方法中可以调用其中一个接口的默认方法;
3)情况三:类实现了两个接口,其中一个接口定义了一个非默认的方法,而另外一个接口实现了同名同参的默认方法;
还是存在二义性问题,此时实现类编译会报错,需要在实现类中覆盖这个方法,覆盖的方法中可以调用那个接口的默认方法;
5、比较器 Comparator 与 Comparable
5.1、实验一、没实现任何接口排序
5.2、实验二、使用实现 Comparator 接口的比较器
5.3、实验三、实现 Comparable 接口
6、克隆
1)对象克隆是指复制出一个一模一样的对象出来,原对象和复制对象是两个不同的对象,它们初始状态一致,但操作之后状态就不一样了;
克隆也就是复制出各个字段的值一样的对象;
2)Object 类中 clone 方法是浅克隆;
1、所谓浅克隆就是只复制一层,不会复制克隆对象中的子对象字段;
2、clone 方法是 protected 修饰的,对对象中的子对象不适用了;
3)Cloneable 接口;
1、是一个标记接口,类似 java.io.Serializable 接口,没有任何方法;
2、该接口继承 Object 类中的 clone 方法;
3、在实际使用时,我们需要实现 Cloneable 接口,并实现 clone 接口,把 clone() 方法改为 public 修饰;
4)示例:可以在实现类中的覆盖方法 clone 中自定义为深克隆;
本文暂时没有评论,来添加一个吧(●'◡'●)