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

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{

	@Override
	public void actionPerformed(ActionEvent event) {
		System.out.println(new Date());
		Toolkit.getDefaultToolkit().beep();
	}
	
}

在这里插入图片描述

3.Comparator接口

01-按照长度比较字符串

package com.eleven.intefacee;

import java.util.Arrays;
import java.util.Comparator;

public class LengthComparator implements Comparator<String> {

	/**
	 * 按照长度比较字符串
	 */
	public int compare(String first, String second) {
		return first.length() - second.length();
	}

	public static void main(String[] args) {
		String[] friends = { "Peter", "Paul", "Mary" };
		
		System.out.println("排序前打印:");
		for (int i = 0; i < friends.length; i++) {
			System.out.print(friends[i] + " ");
		}
		
		System.out.println("\n排序后打印:");
		Arrays.sort(friends, new LengthComparator());
		for (int i = 0; i < friends.length; i++) {
			System.out.print(friends[i] + " ");
		}
	}

}

在这里插入图片描述

发布了90 篇原创文章 · 获赞 284 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41293896/article/details/104044969
今日推荐