接口
public interface MyInterface {
public void foo();
//其他方法
}
必须知道的接口特性
- 接口不可以被实例化
- 实现类必须实现接口的所有方法
- 实现类可以实现多个接口
- 接口中的变量都是静态常量
接口是一种标准,一种协议,一种规范,规定了2个方面。usb接口为例,
规定了usb插槽和usb插头2方面,插槽不按标准生产,插头插不进去;插头不按标准生产,插不进插槽。
接口interface,定义了一系列的方法,同样规定了2个方面,其实是一种约束
1.实现接口的类(比如DepenseDoor类),必须按方法声明(方法名,方法参数,方法返回值)实现这些方法;
2.使用实现了接口类的那些类(比如测试类TestInterface),
必须按接口中的方法声明(方法名,方法参数,方法返回值)去使用这些方法;
例子
- 编写USB接口
根据需求设计方法 - 实现USB接口
实现所有方法 - 使用USB接口
用多态的方式使用
1定义usb接口
public interface UsbInterface {
/**
* USB接口提供服务。
*/
void service();
}
实现接口
public class UDisk implements UsbInterface {
public void service() {
System.out.println("连接USB口,开始传输数据。");
}
}
使用接口
UsbInterface uDisk = new UDisk();
uDisk.service();
接口表示一种能力(体现在接口的方法上 )
做这项工作需要一个程序员
编程是一种“能力”,不关心具体是谁(具体的实现类是谁)
面向接口编程
设计程序时
关心实现类有何能力,而不关心实现细节
面向接口的约定而不考虑接口的具体实现
实例
简单的接口应用于对象之间排序的例子
主方法
package com.testfirst;
public class Main {
public static void main(String[] args) {
// write your code here
Person p1 = new Person("asan",20,24); //new两个person对象
Person p2 = new Person("lisi",16,17);
if(p1.compareTo(p2) > 0) //调Person类中compareTo()方法来比较p1,p2的大小
{
System.out.println("p1大于p2");
}
else
{
System.out.println("p1小于等于p2");
}
}
}
实现接口的类
java中有一个Comparable(比较)类,Comparable(比较)类中只有一个抽象方法compareTo(t o) ,Person类进行比较的时候要实现这个类,那就要实现这个抽象方法(如下代码),
public class Person implements Comparable{
int id = 0;
int age = 0;
String name="李光";// 姓名
//如果当前对象this和传进来的对象o相等,返回0,
// 如果当前对象this比传进来的对象o大,返回大于0的一个数,
// 如果当前对象this比传进来的对象o小,返回负数,
@Override
public int compareTo(Object obj) {
Person person = (Person)obj; //将Object 类的obj强制转换为person类
return this.name.compareTo(person.name); //因为name 是字符串形式有相应的方法,所以调字符串的compareTo()方法来实现两个字符串的大小比较
return this.id - person.id //因为id是int型属性,可以通过返回值是否大于零来比较两个数大小
}
自定义接口的复杂变形
题目跟上题类似
自定义接口MyComparable
MyComparable 接口中只有一个方法,实现compareTo()方法
package com.test;
/**
* Created by ttc on 2018/5/31.
*/
public interface MyComparable {
public int compareTo(Object obj);
}
用person 类去实现自定义接口MyComparable中的比较compareTo()方法
public class Person implements MyComparable{
int id = 0;
int age = 0;
String name="李光";// 姓名
//如果当前对象this和传进来的对象o相等,返回0,
// 如果当前对象this比传进来的对象o大,返回大于0的一个数,
// 如果当前对象this比传进来的对象o小,返回负数,
@Override
public int compareTo(Object obj) {
Person person = (Person)obj;
return this.age - person.age;
}
利用冒泡排序,写一个排序方法 ,将Person类的一个数组传进方法里,在if中调用Person中的compareTo()方法进行比较
package com.test;
/**
* Created by ttc on 2018/5/31.
*/
public class BubbleSort {
public static void sort(Person[] array)
{
for(int i = 0; i < array.length - 1; i++)
{
for(int j = 0; j < array.length - 1 - i; j++)
{
// if(array[j] > array[j+1])
if(array[j].compareTo(array[j+1]) > 0)
{
Person temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
}
主方法中定义一个Person类数组,并将几个Person类对象装进数组中,调用一下BubbleSort类中的.sort方法,对数组进行正向排序,输出数组
public class Main {
public static void main(String[] args) {
// write your code here
Person[] persons = new Person[6];
persons[0] = new Person("asan",20,24);
persons[1] = new Person("lisi",19,17);
persons[2] = new Person("wangwu",25,78);
persons[3] = new Person("liuliu",16,18);
persons[4] = new Person("liuliu2",18,18);
persons[5] = new Person("liuliu3",18,18);
System.out.println(Arrays.toString(persons));
BubbleSort.sort(persons);
// Arrays.sort(persons);
System.out.println(Arrays.toString(persons));
// if(p1.compareTo(p2) > 0)//if(p1 == p2)
// {
// System.out.println("p1大于p2");
// }
// else
// {
// System.out.println("p1小于等于p2");
// }
}
}