当前位置: 代码迷 >> 综合 >> CoreJava(第六章)03-默认方法冲突、接口与回调和Comparator接口
  详细解决方案

CoreJava(第六章)03-默认方法冲突、接口与回调和Comparator接口

热度:25   发布时间:2024-01-26 10:58:18.0

1.解决默认方法冲突

场景一:

如果先在一个接口中将一个方法定义为默认方法,然后在另外一个接口中定义了同样的方法,会出现什么情况?

我们以接口:WoMan和Man;测试:Jane。

Man

public interface Man {default public void sleep() {System.out.println("男人都需要睡觉");}}

WoMan

public interface WoMan {default public void sleep() {System.out.println("女人都需要睡觉");}}

Jane

在这里插入图片描述

总结:

01-接口冲突

我们使用Jane实现两个接口(不同名,方法相同),Java编译器会报告一个错误,让我们自己来选择两个冲突方法中的一个。

场景二:

如果先在一个接口中将一个方法定义为默认方法,然后在超类(父类)中定义了同样的方法,会出现什么情况?

超类(父类)Person;接口Man;测试Jane

Person

public class Person {public  void sleep() {System.out.println("人都需要睡觉");}
}

Man

public interface Man {default public void sleep() {System.out.println("男人都需要睡觉");}}

Jane

在这里插入图片描述

总结:

02-超类(父类)优先

通过控制台打印出来的是"人都需要睡觉",可以看出这段程序优先访问超类(父类)中的方法,由此可以证明:超类和接口都有相同的方法,则程序会优先访问超类中的方法。

2.接口与回调

01-回调概念

我们在执行程序后,程序会发生什么动作(程序会做哪些事情)。

02-举例说明

我们都知道 java.swing 包中有一个 Timer 类, 可以使用它在到达给定的时间间隔时发出通告 。

假如我们的程序中有一个时钟,我们通过请求来达到每秒钟获得一个通告,以便能够更新时钟的表盘(可以理解为秒针)。

这句话大意就是说:(当到达时间间隔时,需要做哪些操作)。

思路:

1)我们需要告诉定时器要做什么?定时器需要调用哪个方法,所以需要实现ActionListener这个接口。

2)我们需要构造一个对象,并将它传递给Timer构造器。

3)启动定时器。

代码:

package com.eleven.intefacee;import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;public class TimerTest {public static void main(String[] args) {ActionListener listener = new TimePrinter();Timer t = new Timer(10000, listener);	// 每隔10秒打印一次t.start();JOptionPane.showMessageDialog(null, "退出程序?");System.exit(0);}
}
/*** 当到达指定的时间间隔时,定时器就会调用actionPerformed方法* @author sywangu**/
class TimePrinter implements ActionListener{@Overridepublic void actionPerformed(ActionEvent event) {System.out.println(new Date());Toolkit.getDefaultToolkit().beep();}}

在这里插入图片描述

3.Comparator接口

01-按照长度比较字符串

  相关解决方案