通过不懈努力,终于学习到了下一章节--接口,接下来讲述一个接口的概念以及一些特性,包括自己的心得体会。
一:
对于个人理解,接口是最抽象的,比抽象类更抽象,它实现了设计与实现的分离,真正体现在现实生活
相当于"如果你是·····那就必须能做·······"的思想,总的来讲接口就是规范,定义了一组规则,凡是一个类实
现了一个或多个接口,就要随时使用实现了相应接口对象,并要遵从接口描述的统一格式进行定义。
二:接口主要来描述类具有什么功能,而并不能给出每个功能的具体实现。使用interface来定义一个接口。
接口定义类似类的定义,分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口
的基本格式如下:
1 [修饰符] interface 接口名 [extends 父接口名列表]{
2 [public] [static] [final] 常量;
3 [public] [abstract] 方法;
4 }
修饰符:可选参数public,可以省略,则为默认的访问权限(public);
接口名:指定接口的名称,默认情况下,接口名必须是合法的Java标示符,一般情况下,要求首字符大写;
extends 父接口名列表:可选参数,指定定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而不能有实现
三:
为了让类实现一个接口,一般需要两个步骤:
①:将类声明为实现给定的接口
②:对接口中的所有方法进行定义
步骤①需要使用关键字:implement
四:
在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔
这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可
以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。
五:
在接口中还可以定义常量,但是绝不能含有实例域,在Java SE 8之前,也不能在接口中实现方法,但是现
在已经可以在接口中提供一些简单的方法,当然这些方法不能引用实例域,还是之前重要的那句话---接
口中没有实例!
下面编写一组代码,对一个Employee类实例数组进行排序的代码:
(一些比较陌生的代码在代码注释中解释)
Employee类实现接口Comparable<Employee>:
package com.Interface;
import java.time.LocalDate;
public class Employee01 implements Comparable<Employee01>{
private String name;
private double salary;
public Employee01(String name,double salary) {
this.name = name;
this.salary=salary;
}
public double getSalary() {
return salary;
}
public String getName() {
return name;
}
public void raiseSalary (double byPercent) {
double raise = salary*byPercent/100;
salary +=raise;
}
//Compares employee by salary
//定义Comparable接口中 compareTo方法
public int compareTo(Employee01 other) {
//使用静态 Double.compare方法,如果第一个参数小于第二个参数,返回负值,两者相等返回0,否则返回正值
return Double.compare(salary, other.salary);
}
}
EmployeeSortTest类进行测试:
package com.Interface;
import java.util.Arrays;
/**
* This program demonstrates the use of the comparable inferface
* @author 李阳
*
*/
public class EmployeeSortTest {
public static void main(String[] args) {
Employee01[] staff = new Employee01[3];
staff[1] =new Employee01("a", 30000);
staff[0] =new Employee01("aaaa", 10000);
staff[2] =new Employee01("ccc", 20000);
Arrays.sort(staff);
for (Employee01 e : staff) {
System.out.println("name="+e.getName()+",salary="+e.getSalary());
}
}
}
打印一下结果:
name=aaaa,salary=10000.0
name=ccc,salary=20000.0
name=a,salary=30000.0
最后的结果明显是有序排列,通过Arrays类的sort方法对Employee数组进行排序,则Employee类就必须实现Comparable接口。
开启了新的一章,小伙伴们有没有感觉学习更有动力了,加油少年!
小伙伴们可以关注我的公众号,留言必回复哦
Java核心基础
----------------------------------
长按关注哦(看那两撇小胡子)
基础 | 心得 | 经历 | 更重要的是开心嘛!