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

Java接口interface(内含练习)

为什么有接口?

接口就是一种规则,更侧向是一种行为

接口的定义和使用

接口用关键字interface来定义

public interface 接口名{}

接口不能实例化

接口和接口之间是实现关系,通过implements关键字表示

public class 类名 implements 接口名{}

接口的子类(实现类)

要么重写接口中的所有抽象方法

要么是抽象类

注意1:接口和类的实现关系,可以单实现,也可以多实现。

public class 类名 implements 接口名1,接口名2{}

注意2:实现类还可以在继承一个类的同时实现多个接口。

public class 类名 extends 父类 implements 接口名1,接口名2{}

接口中成员的特点

成员变量

1.只能是常量

2.默认修饰符:public static final

构造方法

没有

成员方法

1.只能是抽象方法

2.默认修饰符:public abstract

接口和类之间的关系

类和类的关系

继承关系,只能单继承,不能多继承,但是可以多层继承

类和接口的关系

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口,如果有重名的方法,重写一次就可以了,这样会代表两个接口里面都重写了。

接口和接口的关系

继承关系,可以单继承也可以多继承

小练习

person.java

package Interface;
//因为现在我不想让外界去直接创建人的对象
//因为直接创建顶层父类人的对象此时是没有意义的
//所以我就把他写为抽象的
public abstract class person {private String name;private int age;public person() {}public person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Sporter.java

package Interface;public abstract class Sporter extends person{public Sporter() {}public Sporter(String name, int age) {super(name, age);}public abstract void study();
}

Coach.java

package Interface;public abstract class Coach extends person{public Coach() {}public Coach(String name, int age) {super(name, age);}public abstract void teach();
}

say.java

package Interface;public interface say {void say();
}

BasketballCoach.java

package Interface;public class BasketballCoach extends Coach{public BasketballCoach() {}public BasketballCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("篮球教练在教打篮球");}
}

BasketballSporter.java

package Interface;public class BasketballSporter extends Sporter{public BasketballSporter() {}public BasketballSporter(String name, int age) {super(name, age);}@Overridepublic void study() {System.out.println("篮球运动员在学习打篮球");}
}

PingPangCoach.java

package Interface;public class PingPangCoach extends Coach implements say{public PingPangCoach() {}public PingPangCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("乒乓球教练在教打乒乓球");}@Overridepublic void say() {System.out.println("乒乓球教练在说英语");}
}

PingPangSporter.java

package Interface;public class PingPangSporter extends Sporter implements say{public PingPangSporter() {}public PingPangSporter(String name, int age) {super(name, age);}@Overridepublic void study() {System.out.println("乒乓球运动员学习如何打乒乓球");}@Overridepublic void say() {System.out.println("乒乓球运动员在学习如何说英语");}
}

Test.java

package Interface;public class Test {public static void main(String[] args) {PingPangSporter pps = new PingPangSporter("马龙",20);System.out.println(pps.getName()+","+pps.getAge());pps.study();pps.say();}
}

JDK8开始接口中新增的方法

接口中可以定义有方法体的方法(默认,静态)

允许在接口中定义默认方法,需要使用关键字default修饰

作用:解决接口升级问题

接口中默认方法的定义格式

格式:public default 返回值类型 方法名(参数列表){}

范例:pubilc default void show(){}

注意事项:

1.默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字

2.public可以省略,但是default不能省略

3.如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写。

允许在接口中定义定义静态方法,需要用static修饰

接口中静态方法的定义格式:

格式:public static 返回值类型 方法名(参数列表){}

范例:pubilc static void show(){}

注意事项:

静态方法只能通过接口名调用,不能通过实现类名或者对象名调用

public可以省略,static不能省略

接口的应用

1.接口代表规则,是行为的抽象。想让哪个类拥有一个行为,就让这个类实现对应的接口就可以了

2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。

适配器设计模式

设计模式就是可以解决各类问题的套路

解决接口与接口实现类之间的矛盾问题

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 树莓派开发笔记13-树莓派环境下的CSI摄像头实验
  • centos 虚拟机器刚刚安装没有ip地址的问题
  • 微软AI人工智能认证有哪些?
  • ChatGPT不同模型在论文写作中的优势和应用
  • 044—pandas 按组将属性和值转为行
  • GRL CVPR2023图像修复 使用笔记
  • IDM是海外加速器吗 IDM在国内好用吗
  • leetcode 438.找到字符串中所有字母异位词
  • 突破编程:C++中的组合模式(Composite Pattern)
  • linux下搭建MySQL8.0.25一主一从
  • rust 日志记录与跟踪
  • 沉浸式解压小视频在哪找?非常减压的几个视频素材网站分享
  • NLP发展脉络-->特征优化阶段
  • SAM 2——视频和图像实时实例分割的全新开源模型
  • matlab实现粒子群优化算法
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Apache Zeppelin在Apache Trafodion上的可视化
  • AWS实战 - 利用IAM对S3做访问控制
  • ComponentOne 2017 V2版本正式发布
  • django开发-定时任务的使用
  • Github访问慢解决办法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Linux各目录及每个目录的详细介绍
  • Promise面试题2实现异步串行执行
  • Python_OOP
  • ReactNative开发常用的三方模块
  • supervisor 永不挂掉的进程 安装以及使用
  • 给Prometheus造假数据的方法
  • 构建二叉树进行数值数组的去重及优化
  • 基于游标的分页接口实现
  • 简析gRPC client 连接管理
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我的面试准备过程--容器(更新中)
  • 我与Jetbrains的这些年
  • 移动端 h5开发相关内容总结(三)
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #java学习笔记(面向对象)----(未完结)
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (10)STL算法之搜索(二) 二分查找
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (面试必看!)锁策略
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (译)计算距离、方位和更多经纬度之间的点
  • (自用)交互协议设计——protobuf序列化
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件