Java接口基本介绍

接口

在我们日常生活中有许多的接口,例如USB接口,插座接口等,它们都是一种实现某种功能的标准。假如没有这些USB接口标准,那么我们可能每个U盘都有自己的接口形状,导致许多优盘不能插入电脑进行数据交互,假如没有插座接口,那么我们可能插座接口这个标准,那么就会有许多的电器不能插入插座,由此可见接口的重要性。

接口的概念

上面介绍了日常生活中的接口,了解了它们是一种实现某种功能的标准,在java中的接口也是一种标准,接口是对类的一组需求描述,是公共的行为规范标准,在实现时,只要符合规范标准,就可以通用。接口是一种引用数据类型。

接口的语法

接口的定义

我们知道接口是类的一组需求的描述。在定义时,我们要用到关键字interface。变量只能是public static final修饰的,方法没有具体的实现,并且都是由public abstract修饰的。这些用于修饰的关键字可以被省略,接口中的变量和方法会被隐式定义为这些修饰符修饰的。

public interface 接口名称{
	//变量
	public static final int a = 1;
	public int b = 1;
	static final int c = 1;
	int d = 1;
	//以上四种定义方式都是一样的效果,推荐第四种
	// 抽象方法
	public abstract void method1(); // public abstract 是固定搭配,可以不写
	public void method2();
	abstract void method3();
	void method4();
	// 注意:在接口中上述写法都是抽象方法,跟推荐方式4,代码更简洁
}
接口的实现

接口是为类服务的,它是类的一组需求的描述,类要想使用接口中的功能就得实现接口,实现接口要用到关键字implements,并且要对接口中的每个方法进行重写。

public class 类名称 implements 接口名称{
    //..实例域
	//...对所以接口中的方法进行重写(此部分不能省)
	//..其他方法
}

接口的特性

  1. 接口是一种引用数据类型,但是不能直接用new关键字引用接口的对象。
  2. 接口中的方法必须是有public修饰的抽象方法,并且会被隐式定义为public abstract。
  3. 接口中的方法不能在接口中实现,只能由实现接口的类实现。
  4. 在类中重写接口中的方法一定要加public修饰,不能不加访问限定修饰符。
  5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量
  6. 接口中不能有静态代码块、实例代码块和构造方法。
  7. 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。
  8. 尽管每个类只能够拥有一个超类/父类, 但却可以实现多个接口。
interface A{
    void func1();
}
interface B{
    void func2();
}
interface C{
    void func3();
}
class D{
    public void func4();
}
//类E继承一个类,实现多个接口
class E extends D implements A,B,C{
	//....
	public void func1{
	    //...
	}
	public void func2{
	    //...
	}
	public void func3{
	    //...
	}
}
  1. 接口之间也可以继承,并且可以是多继承
interface IRunning {
	void run();
} 
interface ISwimming {
	void swim();
} 
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
	
}
class Frog implements IAmphibious {
	...
}

接口的使用及案例

实现Comparable接口从而实现对象数组的排序

我们知道在进行对基本数据类型的数组排序时可以使用Arrays.sort()函数进行,但是如果想对利用此方法对对象数组排序,前提必须是对象的类是实现了Comparable接口,这是由于Arrays.sort()函数的底层是要用到Comparable接口中的compareTo方法。重写compareTo方法应该遵循一下原则:

  1. 如果当前对象应排在参数对象之前, 返回小于 0 的数字;
  2. 如果当前对象应排在参数对象之后, 返回大于 0 的数字;
  3. 如果当前对象和参数对象不分先后, 返回 0;
class Student implements Comparable {
	private String name;
	private int score;
	public Student(String name, int score) {
		this.name = name;
		this.score = score;
	} @
	Override
	public String toString() {
		return "[" + this.name + ":" + this.score + "]";
	} @
	Override
	public int compareTo(Object o) {
		Student s = (Student)o;
		if (this.score > s.score) {
			return -1;
		} else if (this.score < s.score) {
			return 1;
		} else {
			return 0;
	}
  }
}
public class Demon1 {
    public static void main(String[] args) { 
		Student[] students = new Student[] {
			new Student("张三", 95),
			new Student("李四", 96),
			new Student("王五", 97),
			new Student("赵六", 92),
		};
		Arrays.sort(students);
		System.out.println(Arrays.toString(students));
	}
}

执行结果:
[[王五:97], [李四:96], [张三:95], [赵六:92]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值