接口 interface
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口特点
1.接口不能创建对象
2.关键字interface
public interface 接口名{
//成员变量
//成员方法
}
public interface A{
String SCHOOL_NAME = "地点";//成员变量
void test();//成员方法(抽象方法没有方法体)
}
3.接口没有构造器,没有方法体,不能创建对象
4.接口用来被类实现(implements)的,称为实现类
接口 implements关键字
1.好处弥补类单继承的不足,一个类可以同时实现多个接口
2.让程序可以面对接口编程
面向接口编程
1.创建学生实体类类
public class Student {
//创建学生类
private String name;
private char sex;
private double score;
public Student() {
}
public Student(String name, char sex, double score) {
this.name = name;
this.sex = sex;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
创建一个接口StudentOperator
public interface StudentOperator {//创建接口
void printAllInfo(ArrayList<Student> students);
void printAverageScore(ArrayList<Student> students);
}
创建一个 StudentOperatorImpl1类继承接口
public class StudentOperatorImpl1 implements StudentOperator{
@Override
public void printAllInfo(ArrayList<Student> students) {
System.out.println("全班信息");
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println("姓名"+s.getName()+"性别"+s.getSex()+"分数"+s.getScore());
}
}
@Override
public void printAverageScore(ArrayList<Student> students) {
double allScore = 0.0;
for (int i = 0; i < students.size(); i++) {
Student a = students.get(i);
allScore += a .getScore();
}
System.out.println("平均分"+allScore/students.size());
}
}
创建一个 StudentOperatorImpl2类继承接口
public class StudentOperatorImpl2 implements StudentOperator{
@Override
public void printAllInfo(ArrayList<Student> students) {
int count1 = 0;
int count2 = 0;
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println("姓名"+s.getName()+"性别"+s.getSex()+"分数"+s.getScore());
if (s.getSex() == '男'){
count1++;
}else {
count2++;
}
}
System.out.println("男生人数有"+count1 +"女生人数有"+count2);
System.out.println("班级总人数"+students.size());
}
@Override
public void printAverageScore(ArrayList<Student> students) {
double allScore = 0.0;
double max = students.get(0).getScore();
double min = students.get(0).getScore();
for (int i = 0; i < students.size(); i++) {
Student a = students.get(i);
if (a.getScore()>max) max = a.getScore();//最大值
if (a.getScore()<min) min = a.getScore();//最小值
allScore += a.getScore();
}
System.out.println("学生发最高分"+max);
System.out.println("学生发最低分"+min);
System.out.println("平均分"+(allScore-max-min)/(students.size()-2));
}
}
创建学生用户信息管理类
public class classManager {
private ArrayList<Student> students = new ArrayList<>();// 创建一个集合存放学生数据
private StudentOperator studentOperator = new StudentOperatorImpl2(); //指定一个studentOperator对象调用接口方案1
public classManager(){//创建学生用户信息
students.add(new Student("阿飞",'男',18));
students.add(new Student("阿村",'女',17));
students.add(new Student("阿亮",'男',16));
students.add(new Student("阿化",'女',15));
}
public void printInfo() {//选择两个方法面向接口编程
studentOperator.printAllInfo(students);//将student信息交给接口方法来完成
}
public void printScore(){
studentOperator.printAverageScore(students);//将student信息交给接口方法来完成
}
测试类
public static void main(String[] args) {
classManager clazz =new classManager();
clazz.printInfo();
clazz.printScore();
}
jdk8之后接口新增的接口方法
接口默认public修饰
public interface A {//创建一个接口
default void test1(){//实列方法,必须使用实现类的对象来访问
System.out.println("默认方法");
test2();
}
private void test2(){
System.out.println("私有方法");
//私有方法只能在接口内调用
};
static void test3(){
System.out.println("静态方法");
}//静态方法只能用接口调用
}
接口的多继承
1.一个接口可以有多个继承
2.如果一个接口多继承其他接口,当接口的方法签名相同时会冲突,不能被继承
3.当父类与方法实现接口会先实现父类