JAVA基础之接口
接口
学习完框架之后,整合SSM过程中对于接口的认识加深了许多。根据《java核心技术》这本书进一步研究了一下。
1.概念
java核心技术是这样说的:“在Java程序设计中,接口不是类,而是对希望符合这个接口的类的一组需求”。
- 首先:接口不是类;
- 其次:接口是符合这个接口的类的一组需求;
第二点的意思就是说接口需要有一个实现类对它进行实现;
2.具体实现
- 通过源码研究一下
public interface Comparable<T> {
public int compareTo(T o);
}
-
- 接口就是对需求的一个展示,谁使用谁就需要去重写一个方法;
- 接口使用“interface”关键字代替“class”关键字。
- 实际上接口中的所有方法都是公开,接口中的方法中的public可以不用书写,但是很多人为了代码结构的完整性都会加上。
-
实现类
class Employee implements Comparable<Employee>{
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [name=" + name + ", salary=" + salary + "]";
}
@Override
public int compareTo(Employee o) {
// TODO Auto-generated method stub
/*
* 按照价格排序
*/
return Double.compare(salary, o.salary);
}
}
-
- 1.实现类必须继承接口的方法,参数,返回值必须保持一致;
- 2.Arrays.sort(T)这个方法很重要,T这个对象必须实现Comparable接口才能使用,因为sort方法是通过Comparable接口中的comparaTo()进行比较的,具体情况看源码;
-
具体使用
public class EmployeeSortTest { public static void main(String[] args) { var staff = new Employee[3]; staff[0] = new Employee("Harry Hacker",35000); staff[1] = new Employee("Carl Cracker",75000); staff[2] = new Employee("Tony Tester",38000); Arrays.sort(staff); for(Employee e:staff) { System.out.println("name="+e.getName()+",salary="+e.getSalary()); } } }
3.属性
-
接口不是类,不能使用new 创建一个接口对象。但是:
-
接口可以声明一个接口变量,而且可以通过一个实现类创建这个对象;
Comparable x; x = new Emplyee();
-
-
接口判断
System.out.println(staff[2] instanceof Employee); System.out.println(staff[1] instanceof Comparable);
- 使用”instanceof“关键字,就可以实现接口的判断;
-
接口中不能包含实例字段,但是可以包含常量;
public interface T { void so(); int account= 1; }
- 接口中的字段总是public static final;
4.继承
-
1.虽然每个类都只有一个父类,但是可以有多个接口;
-
2.接口也可以继承;
package com.sun.day01.Com; public interface Moveable { void move(Integer x,Integer y); }
package com.sun.day01.Com; public interface LeftMoveable extends Moveable { Integer move(int x,int y); }
5.接口的兼容性
-
1.Java中的接口最初设计为抽象类型,可用于类型的多种继承。
-
2.在Java 1.0中,接口定义只能包含两种成员:静态常量和抽象方法。
-
3.java8之前,接口基本上没有多大变化;
public interface {
void so();
int account= 1;
}
-
4.java8开始,接口开始发生重大变化,接口中出现了默认方法,接口中可以产生静态方法;
-
5.Java 9以后的接口中受支持的成员有静态常量,抽象方法,默认方法,静态方法,私有方法,嵌套类,嵌套接口,嵌套枚举和嵌套批注。(还真不少以后慢慢学‘
)
静态方法注意了!!!!
package com.sun.demo;
public interface demoI {
void sort();
default int accountSort(){
return 0;
}
}
package com.sun.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class demo1 implements demoI{
public static void main(String[] args){
List<String> a = new ArrayList<String>();
a.add("Libai");
a.add("Tom");
for (String adb:a) {
System.out.println(adb);
}
a.remove("2");
for (String a1:a) {
System.out.println(a1);
}
}
@Override
public void sort() {
System.out.println("没有默认方法");
}
}
-
- 这就极大的增加了代码的兼容性,在接口中增加默认方法部影响,使用过接口的实现类,同时通过默认方法可以规范,接口中需求的不足;
- 其实,这也违背接口的初衷,但是也不断的让java更加全面;