博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java接口
阅读量:5324 次
发布时间:2019-06-14

本文共 3648 字,大约阅读时间需要 12 分钟。

1.接口概念

接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一规则进行定义。可以将接口看成没有实例域的抽象类,但这两个概念有一定区别。

抽象类和接口的区别:

1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。

2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

 

2.静态方法

 

package com.interfaces;public interface MyInterface {	static void staticMethod() {		System.out.println("static method");	}		default void defaultMethod() {		System.out.println("default method");	}		void smapleMethod();}

  

package com.interfaces;import com.interfaces.MyInterface;public class Test implements MyInterface{	public static void main(String[] args) {		// TODO Auto-generated method stub		Test t = new Test();		t.defaultMethod();		t.sampleMethod();		MyInterface.staticMethod();			}	//	public void defaultMethod() {//		System.out.println("default method~");//	}		public void sampleMethod() {		System.out.println("sample method");	}		@Override	public void smapleMethod() {		// TODO Auto-generated method stub		System.out.println("sample method");	}}

  

3.默认方法

可以为接口方法提供一个默认实现。必须用default修饰符标记这样一个方法。

 

不重载默认方法

package com.interfaces;import com.interfaces.MyInterface;public class Test implements MyInterface{	public static void main(String[] args) {		// TODO Auto-generated method stub		Test t = new Test();		t.defaultMethod();		t.sampleMethod();		MyInterface.staticMethod();			}	//	public void defaultMethod() {//		System.out.println("default method~");//	}		public void sampleMethod() {		System.out.println("sample method");	}		@Override	public void smapleMethod() {		// TODO Auto-generated method stub		System.out.println("sample method");	}}

  

重载默认方法

package com.interfaces;import com.interfaces.MyInterface;public class Test implements MyInterface{	public static void main(String[] args) {		// TODO Auto-generated method stub		Test t = new Test();		t.defaultMethod();		t.sampleMethod();		MyInterface.staticMethod();			}		public void defaultMethod() {		System.out.println("default method~");	}		public void sampleMethod() {		System.out.println("sample method");	}		@Override	public void smapleMethod() {		// TODO Auto-generated method stub		System.out.println("sample method");	}}

  

4. 解决默认方法冲突

如果先在一个接口中将一个方法定义为默认方法,然后又在超类或另一个接口中定义了同样的方法,会发生什么情况?

Java解决规则:

1) 超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。

2) 接口冲突。如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法,必须覆盖这个方法来解决冲突

 

5. 接口实例

接口与回调

在java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告,定时器需要知道调用哪一个方法,并要求传递的对象所属的类实现了java.awt.event包的ActionListener接口。

package com.interfaces;import javax.swing.JOptionPane;import javax.swing.Timer;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Date;public class InterfaceTest implements ActionListener {	public static void main(String[] args) {		// TODO Auto-generated method stub		ActionListener listener = new InterfaceTest();		Timer t = new Timer(10000,listener);		t.start();		JOptionPane.showMessageDialog(null, "Quit program?");		System.exit(0);			}		public void actionPerformed() {		System.out.println("now is"+new Date());	}	@Override	public void actionPerformed(ActionEvent e) {		// TODO Auto-generated method stub		System.out.println("now is"+new Date());	}}

  

Comparable接口:

 

package com.interfaces;import java.util.Arrays;import java.util.Comparator;public class LengthComparator implements Comparator
{ public static void main(String[] args) { String[] l = {"hello","tom","kimm"}; Arrays.sort(l,new LengthComparator()); for (String e:l) { System.out.println(e); } } public int compare(String s1,String s2) { return s1.length() - s2.length(); }}

  

转载于:https://www.cnblogs.com/zenan/p/10169379.html

你可能感兴趣的文章
poj2388---求奇数个数字的最中间的数
查看>>
对闭包的理解
查看>>
java.lang.OutOfMemoryError异常解决方法
查看>>
Css让文字自适应Table宽度[转]
查看>>
[Javascript] Flattening nested arrays: a little exercise in functional refactoring
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
使用maven构建多模块项目,分块开发
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
jffs2镜像制作
查看>>
windows编程ASCII问题
查看>>
.net webService代理类
查看>>
C#高级编程笔记(一)
查看>>
工作时如何利用空闲时间熟悉项目
查看>>
大道至简第五章读后感
查看>>
Code Snippet
查看>>
MFC模态对话框程序不响应OnIdle
查看>>
Node.js Express项目搭建
查看>>
zoj 1232 Adventure of Super Mario
查看>>
Oracle 序列的应用
查看>>
1201 网页基础--JavaScript(DOM)
查看>>