java接口学习笔记--- Java核心技术

1、接口属性

  • 接口不能用new操作符实例化
  • 接口可以声明变量,这个变量必须引用实现了这个类的对象
  • 可以用instanceof检查一个对象是否实现了某个接口 eg. a instance if b
  • 接口中不能有实例字段,但是可以定义常量,常量默认是public static final,且不能更改
  • 一个类只能有一个超类,但是可以实现多个接口,使用逗号将要实现的接口分开 

eg. public class Employee implements Cloneable,Comparable

2、抽象类和接口的对比

  • 都可以声明通用方法
  • Java类只能有一个父类,一个类只能继承一个抽象类
  • 一个类却可以实现多个接口

3、静态方法和私有方法。

     转载自 java接口中的默认方法、静态方法、私有方法_灬繁花落雨灬的博客-CSDN博客_java 接口私有方法

4、默认方法

  • 默认方法的标识符为default,不能省略
  • 有了默认方法后,即使实现类中没有定义这个方法,类对象仍然可以直接调用
  • 接口新加了非默认方法后,如果类中没有实现这个方法,那么这个类编译会报错;如果不编译直接使用老的jar包不会报错,但是不能调用新加的方法

5、默认方法冲突

  • 超类优先。如果超类中定义了一个具体方法,同名且同参数的接口的默认方法会被忽略
  • 接口冲突。一个接口中提供了默认方法,另一个接口提供了同名且同参数的方法(不论是否是默认方法),编译器都会要求实现类覆盖这个方法来解决冲突
  • 如果一个接口增加了默认方法,那么对于增加默认方法前能正常工作的代码不会有任何影响

6、接口与回调

public class TimerTest {
	public static void main(String... args)
	{
		var tp = new TimerPrinter();
		Timer t = new Timer(1000, tp);
		t.start();
		JOptionPane.showMessageDialog(null, "quit program?");
		System.exit(0);
	}
}

class TimerPrinter implements ActionListener
{

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		System.out.println("at the tone, the time is: " + Instant.ofEpochMilli(e.getWhen()));
		Toolkit.getDefaultToolkit().beep();
	}
}

7、克隆

对于实现克隆的类,需要的步骤:

  1. 默认的clone方法是否满足要求
  2. 是否可以在可变的子对象上调用clone来修补默认的克隆方法
  3. 是否不该使用clone
  4. 需要实现步骤1和步骤2,需要满足:实现cloneable接口;重新定义clone方法,并设置修饰符为public

8、lambda表达式

  • 应用场景:对于只有一个抽象方法的接口,当需要这个接口的对象时,就可以提供一个lambda表达式替代这个对象。这种接口称为函数式接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值