当前位置: 首页 > news >正文

Java—接口

目录

1、接口概述

2、接口的好处

3、接口的综合小案例

4、接口新增的三种方法

5、接口的几个注意事项

6、抽象类和接口的区别

7、综合小案例


1、接口概述

        Java提供了一个关键字interface定义出接口。

接口的格式

public interface 接口名{

        // 成员变量(常量

        // 成员方法(抽象方法)

}

A 接口

public interface A {//在JDK8之前,接口中只能定义常量和抽象方法//1、常量:接口中定义可以省略public static final不写,默认会加上去。String SCHOOL_NAME = "清华大学";//public static final String SCHOOL_NAME1 = "清华大学";//2、抽象方法:接口中定义可以省略public abstract不写,默认会加上去。//public abstract void show();void show();
}
  • 注意:接口不能创建对象
  • 接口是用来被实现(implements)的,实现接口的类称为实现类一个类可以同时实现多个接口。

实现类的格式:

修饰符 class 实现类列类名 implements 接口1,接口2,接口3, .....{

        //实现类实现多个接口,必须重写全部接口的全部抽象方法

        //否则实现类需要定义成抽象类。

}

A类

public interface A {//在JDK8之前,接口中只能定义常量和抽象方法//1、常量:接口中定义可以省略public static final不写,默认会加上去。String SCHOOL_NAME = "清华大学";//public static final String SCHOOL_NAME1 = "清华大学";//2、抽象方法:接口中定义可以省略public abstract不写,默认会加上去。//public abstract void show();void show();
}

B类

public class Test {public static void main(String[] args) {//接口不能创建对象//实现类实现多个接口,必须重写接口中所有抽象方法,否则这个类必须定义成抽象类C c = new C();c.show();c.run();}
}class C implements A,B {@Overridepublic void show() {System.out.println("show()");}@Overridepublic void run() {System.out.println("run()");}
}
/*
show()
run()*/

Test类

public class Test {public static void main(String[] args) {C c = new C();c.show();c.run();}
}class C implements A,B {@Overridepublic void show() {System.out.println("show()");}@Overridepublic void run() {System.out.println("run()");}
}
/*
show()
run()*/

2、接口的好处

  • 弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。
  • 让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序解耦合)。

Test类:理解接口的好处

public class Test {public static void main(String[] args) {//目标:去理解Java设计接口的好处,用处//接口弥补了类单继承的不足,可以让类拥有更多角色,类的功能更强大。People p = new Student();Driver d = new Student();  //多态BoyFriend bf = new Student();//2、接口可以实现面向接口编程,更有利于解耦合Driver d1 = new Teacher();  //右侧可以换成Student有利于解耦合}
}
interface Driver{} //司机类
interface BoyFriend{} //BoyFriend类
class People{} //人类class Student extends People implements Driver,BoyFriend{}class Teacher  implements Driver,BoyFriend{}

3、接口的综合小案例

Student 类

public class Student {private String name;private String sex;private double Score;public Student(String name, String sex, int Score) {this.name = name;this.sex = sex;this.Score = Score;}private Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public double getGrade() {return Score;}public void setGrade(int grade) {this.Score = grade;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", sex='" + sex + '\'' +", Score=" + Score +'}';}
}

ClassDataInter 类

public interface ClassDataInter {void printAllStudentInfos();void printStudentAvgScore();
}

ClassDataInterImpl1 类

public class ClassDataInterImpl1 implements ClassDataInter {Student[] students;public ClassDataInterImpl1(Student[] students) {this.students = students;}@Overridepublic void printAllStudentInfos() {//定义第一套实现类,实现接口:实现打印全部学生信息,打印平均分for (int i = 0; i < students.length; i++) {System.out.println(students[i]);}}@Overridepublic void printStudentAvgScore() {double sum = 0;for (int i = 0; i < students.length; i++) {sum += students[i].getGrade();}System.out.println("平均分:" + sum / students.length);}
}

ClassDataInterImpl2 类

public class ClassDataInterImpl2 implements ClassDataInter {//实现接口:实现打印全部学生信息(打印男女人数),打印平均分(去掉最高分和最低分)Student[] students;public ClassDataInterImpl2(Student[] students) {this.students = students;}@Overridepublic void printAllStudentInfos() {//实现接口:实现打印全部学生信息(打印男女人数),打印平均分(去掉最高分和最低分)int manNum = 0;int womanNum = 0;for (int i = 0; i < students.length; i++) {if(students[i].getSex().equals("男")){manNum++;}else{womanNum++;}System.out.println(students[i]);}System.out.println("男性人数是:" + manNum);System.out.println("女性人数是:" + womanNum);}@Overridepublic void printStudentAvgScore() {//打印平均分(去掉最高分和最低分)double max = students[0].getGrade();double min = students[0].getGrade();for (int i = 0; i < students.length; i++) {if (students[i].getGrade() > max) {max = students[i].getGrade();}if (students[i].getGrade() < min) {min = students[i].getGrade();}}double sum = 0;for (int i = 0; i < students.length; i++) {sum += students[i].getGrade();}System.out.println("平均分是:" + (sum - max - min) / (students.length - 2));}
}

Test类

public class Test {public static void main(String[] args) {//目标:完成接口小案例//1、定义学生类,创建学生对象,封装学生数据,才能交给别人处理学生数据//2、准备学生数据,目前我们自己造一些数据Student [] allstudents = new Student[10];allstudents[0] = new Student("张三","男",77);allstudents[1] = new Student("李四","男",66);allstudents[2] = new Student("王五","女",89);allstudents[3] = new Student("赵六","男",88);allstudents[4] = new Student("孙七","不",80);allstudents[5] = new Student("周八","男",64);allstudents[6] = new Student("吴九","男",60);allstudents[7] = new Student("郑十","女",95);allstudents[8] = new Student("王十一","男",100);allstudents[9] = new Student("王十二","女",99);//3、提供两套业务实现方案,支持灵活切换(解耦合):面向接口编程//---定义一个接口(规范思想):必须完成打印全部学生信息,打印平均分//---定义第一套实现类,实现接口:实现打印全部学生信息,打印平均分//---定义第二套实现类,实现接口:实现打印全部学生信息(打印男女人数),打印平均分(去掉最高分和最低分)//创建接口实现类对象ClassDataInter cdi1 = new ClassDataInterImpl1(allstudents);cdi1.printAllStudentInfos();cdi1.printStudentAvgScore();}
}

4、接口新增的三种方法

        JDK 8开始,接口新增了三种形式的方法。

        接口中为什么新增了方法?增强了接口的能力,更便于项目的扩展和维护。

5、接口的几个注意事项

  • 接口与接口可以多继承:一个接口可以同时继承多个接口[重点]。
  • 一个接口继承多个接口,如果多个接口中存在方法冲突,则此时不支持继承,也不支持多实现。
  • 一个类继承了父类,又同时实现了接口,如果父类中和接口中有相同的默认方法,实现类会优先用父类。
  • 一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这重写该方法即可。
public class Test {public static void main(String[] args) {CC c = new CC();c.test1();f f1 = new f();f1.test1();}
}//4、一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这重写该方法即可。
interface s{default void test1(){System.out.println("s接口中的Test1方法");}
}
interface t{default void test1(){System.out.println("t接口中的Test1方法");}
}
class f implements s,t{@Overridepublic void test1() {System.out.println("实现类中的Test1方法");}
}//3.一个类继承了父类,又同时实现了接口,如果父类中和接口中有相同的默认方法,实现类会优先用父类
interface  AA{default void test1(){System.out.println("接口中的Test1方法");}
}
class BB {void test1(){System.out.println("父类中的Test1方法");}
}
class CC extends BB implements AA{}//2、一个接口继承多个接口,如果多个接口中存在方法冲突,则此时不支持继承,也不支持多实现。
interface A1{void test1();
}
interface B1{int test1();
}
//如果两个方法完全一样,就不会报错,方法合并
//如果名字一样,参数不同或返回类型不同,就会报错
//interface C1 extends A1,B1{  //报错
//    void test3();
//}//1、接口与接口可以多继承:一个接口可以同时继承多个接口[重点]。
//类和类:单继承一个类只能继承一个父类。
//类与接口:多实现,一个类可与同时实现多个接口。
//接口与接口:多继承,一个接口可以同时继承多个接口。
interface A{void test1();
}
interface B{void test2();
}
interface C extends A,B{  //多继承,一个接口可以同时继承多个接口。void test3();
}
class D implements A,B,C{  //多实现,一个类可与同时实现多个接口。@Overridepublic void test1() {}@Overridepublic void test2() {}@Overridepublic void test3() {}
}

6、抽象类和接口的区别

7、综合小案例

JD 类:家电类

public class JD implements  Switch{private String name;private boolean status;       //状态,开关//构造器public JD(){}public JD(String name, boolean status) {this.name = name;this.status = status;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isStatus() {return status;}public void setStatus(boolean status) {this.status = status;}@Overridepublic void press() {//控制当前设备的开关status = !status;}
}

Lamp 类:吊顶类

public class Lamp extends JD{public Lamp(String name, boolean status) {super(name, status);}}

WashMachine 类:洗衣机类

public class WashMachine extends JD{public WashMachine(String name, boolean status) {super(name, status);}
}

TV类:电视机类

public class TV extends JD{public TV(String name, boolean status ) {super(name, status);}
}

Air 类:冰箱类

public class Air extends JD{public Air(String name, boolean status) {super(name, status);}}

Switch 接口:控制电器的开关

public interface Switch {void press(); //按压
}

SmartControl 类:单例类,智能控制系统

public class SmartControl {private static SmartControl instance = new SmartControl();private SmartControl(){}public static SmartControl getInstance(){return instance;}public void control(JD jd){System.out.println(jd.getName()+"开关状态:"+ (jd.isStatus()?"关":"开"));jd.press();System.out.println(jd.getName()+"开关已经:"+ (jd.isStatus()?"关":"开"));}//打印all 设备状态public  void printStatus(JD []jd){for (int i = 0; i < jd.length; i++){System.out.println((i + 1) +jd[i].getName()+"开关状态:"+ (jd[i].isStatus()?"关":"开"));}}
}

Test类:测试类

import java.util.Scanner;public class Test {public static void main(String[] args) {//目标:面向对象编程实现智能家居控制系统//角色:设备(吊灯,电视机,洗衣机,冰箱...)//设备功能:开关//谁控制:智能控制系统(单例对象)控制调用设备的开关//1.定义设备类:创建设备类//2.准备这些设备对象,放在对象数组中JD[] jds = new JD[4];jds[0] = new Lamp("吊灯",false);jds[1] = new TV("电视机",false);jds[2] = new WashMachine("洗衣机",false);jds[3] = new Air("冰箱",false);//3、为每个设备创建一个开关对象//4、创建智能控制系统类,并创建对象SmartControl sC = SmartControl.getInstance();Scanner sc = new Scanner(System.in);while (true){//打印设备状态System.out.println("--------------------------");sC.printStatus(jds);System.out.println("请输入设备编号:");int e = sc.nextInt();switch ( e){case 0:return;case 1:sC.control(jds[0]);break;case 2:sC.control(jds[1]);break;case 3:sC.control(jds[2]);break;case 4:sC.control(jds[3]);break;default:System.out.println("输入错误");break;}}}
}

http://www.dtcms.com/a/542347.html

相关文章:

  • 移动网站源码兰州需要做推广的公司
  • 公司架设网站费用怎么做分录自学it怎么入门
  • 不用代码做网站杭州品牌网站设计
  • 商城建站模板广州从化建设网站官网
  • 免费的游戏网站建设建网站软件工具
  • Spring Boot3零基础教程,SpringSecurity 测试,笔记81
  • 哪里有网站推广优化wordpress获取自定类型
  • wordpress读取mysql北京百度搜索优化
  • IntelliJ IDEA 常用快捷键
  • 枣阳网站建设 枣阳山水数码wordpress文章什么时候收录
  • 代码随想录day20:406.根据身高重建队列
  • Redis之IO多路复用 select,poll,epoll
  • 兰州电商网站建设南宁360网
  • wap网站平台网站备案被拒绝
  • 《动手学深度学习》学习笔记——03安装
  • 利用万网做网站网站与网页的区别.
  • 基于素数递减迭代的哥德巴赫猜想证明(终版·严格单调,修改了lcm相关部分)-陈墨仙
  • 高端模板网站建设公司移动端网站建设 新闻动态
  • 四川省住房和城乡建设厅网站不见了html5制作手机网站
  • 有网站域名及空间 别人帮建网站品牌建设方案范文
  • 环氧乙烷气体检测技术及其在工业安全中的应用
  • 做网站找哪个公司宣传册排版
  • 全球电力氮化镓市场将高速扩张
  • 马斯克旗下xAI公司推出的在线百科全书“Grokipedia”现已上线
  • (论文速读)OpenHumanVid:用于增强以人为中心的视频生成的大规模高质量数据集
  • 扁平化网站设计教程外贸建站的公司
  • 谷歌镜像网站怎么做个人养老金制度相关细则
  • 数据结构——三十一、最小生成树(王道408)
  • MySQL | Windows中mysql的卸载
  • 学前端什么网站好松滋市住房和城乡建设局网站