Java接口
2023-12-20 19:26:19
认识接口
- Java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口。
- ?注意:接口不能创建对象;接口是用来被类实现(implements)的,实现接口的类称我实现类。
- 一个类可以实现多个接口(接口可以理解成干爹),现实类实现多个接口,必须重写完全部接口的全部抽象方法,否则实现类需要定义成抽象类。
接口的好处
- 弥补了类单继承的不足,一个类同时可以实现多个接口。
- 让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现。
接口的综合案例
案例:班级学生信息管理模块的开发
Student类
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;
}
}
ClassManage类
import java.util.ArrayList;
public class ClassManage {
private ArrayList<Student> students = new ArrayList<>();
private StudentOperator studentOperator = new StudentOperatorImpl2();
public ClassManage(){
students.add(new Student("张三",'男',99));
students.add(new Student("李四",'男',100));
students.add(new Student("王五",'男',60));
students.add(new Student("赵六",'女',80));
}
//打印全班全部学生的信息
public void printInfo(){
studentOperator.printAllInfo(students);
}
//打印全班全部的学生的平均分
public void printScore(){
studentOperator.printAverage(students);
}
}
StudentOperator接口
import java.util.ArrayList;
public interface StudentOperator {
void printAllInfo(ArrayList<Student> students);
void printAverage(ArrayList<Student> students);
}
StudentOperatorImpl1类
import java.util.ArrayList;
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());
}
System.out.println("=============================");
}
@Override
public void printAverage(ArrayList<Student> students) {
double sum = 0.0;
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
sum += s.getScore();
}
System.out.println("全班平均分为:" + sum/students.size());
}
}
StudentOperatorImpl2类
import java.util.ArrayList;
public class StudentOperatorImpl2 implements StudentOperator{
@Override
public void printAllInfo(ArrayList<Student> students) {
System.out.println("==========全班全部学生信息如下==========");
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());
System.out.println("=============================");
}
@Override
public void printAverage(ArrayList<Student> students) {
double sum = 0.0;
double max = students.get(0).getScore();
double min = students.get(0).getScore();
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
sum += s.getScore();
if (s.getScore() > max){
max = s.getScore();
}else if (s.getScore() < min){
min = s.getScore();
}
}
System.out.println("学生的最高分是:" + max);
System.out.println("学生的最低分是:" + min);
System.out.println("全班平均分为:" + (sum-max-min)/(students.size()-2));
}
}
Test类
public class Test {
public static void main(String[] args) {
// 完成班级学生信息管理案例
ClassManage classManage = new ClassManage();
classManage.printInfo();
classManage.printScore();
}
}
接口的其它细节:JDK8开始,接口中新增的三张方法
- 默认方法:使用default修饰,使用实现了的对象调用
- 静态方法:static修饰,必须用当前接口名调用
- 私有方法:private修饰,jdk9开始才有,只能再接口内部被调用
- 它们都会默认被public修饰
?为什么要新增这些方法
- 增强了接口的能力,更便于项目的扩展和维护。
接口的多继承、使用接口的注意事项
接口的多继承
一个接口可以同时继承多个接口
接口多继承的作用
- 以便于实现类去实现
接口其他注意事项
- 一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承。
- 一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现。
- 一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的。
- 一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
文章来源:https://blog.csdn.net/SU_mu147/article/details/135105834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!