接口
2020-06-01 16:09:13来源:博客园 阅读 ()
接口
接口
接口的定义
-
接口是多个类的公共规范,就像是一种约定
-
接口是一种引用数据类型,最重要的内容就是其中的抽象方法
-
接口格式:
public interface 接口名称 { 接口内容 }
-
接口可包含的内容有:常量、抽象方法、默认方法、静态方法、私有方法
接口使用方法
抽象方法
-
接口不能直接使用,必须有一个实现类来实现该接口
格式:
public class 实现类名称 implements 接口名称
-
接口的实现类必须覆盖重写接口所有的抽象方法
-
创建实现类的对象才可以使用
-
注意:如果实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类就是抽象类(用abstract修饰)
格式:
public abstract 返回值类型 方法名称 (参数列表);
package character; //接口 public interface AD { //定义抽象方法,能够进行物理攻击 public abstract void physicalAttrack(); } //////////////////////////// package character; //实现类 public class ADHero implements AD { String name; //姓名 private float hp;//血量 private float armor; //护甲 int moveSpeed; //移动速度 //覆盖重写接口的抽象方法 @Override public void physicalAttrack(){ System.out.println("进行物理攻击"); } } ////////////////////////////// package character; public class ADHeroInterface { public static void main(String[] args) { //创建实现类的对象 ADHero hero = new ADHero(); hero.physicalAttrack(); } }
默认方法和静态方法(Java 8)
-
接口中允许使用默认方法,主要用于解决接口升级问题
-
接口的默认方法可以通过实现类直接调用,也可以被实现类覆盖重写
格式:
public default 返回值类型 方法名称 (参数列表) { 方法体 }
-
接口中也可使用静态方法,且不能通过实现类的对象来调用接口中的静态方法,应直接通过接口名称调用静态方法
格式:
public static 返回值类型 方法名称 (参数列表) { 方法体 }
package character; //接口 public interface AD { //定义抽象方法,能够进行物理攻击 public abstract void physicalAttrack(); //新添加一个方法,应为默认方法, //当为抽象方法时,实现类应该重新覆盖重写,否则会报错 public default void recieve(){ System.out.println("复活"); } //定义静态方法 public static void methodStatic(){ System.out.println("这是静态方法"); } } /////////////////////////////// package character; //实现类 public class ADHero implements AD { String name; //姓名 private float hp;//血量 private float armor; //护甲 int moveSpeed; //移动速度 //覆盖重写接口的抽象方法 @Override public void physicalAttrack(){ System.out.println("进行物理攻击"); } // //可以覆盖重写默认方法 // @Override // public void recieve() { // System.out.println("覆盖重写默认方法"); // } } //////////////////////////////// package character; public class ADHeroInterface { public static void main(String[] args) { //创建实现类的对象 ADHero hero = new ADHero(); hero.physicalAttrack(); hero.recieve();//可直接调用默认方法 AD.methodStatic();//直接通过接口调用静态方法 } }
私有方法(Java 9)
-
可用私有方法解决接口中方法的重复代码问题
-
普通私有方法解决多个默认方法之间重复代码的问题
格式:
private 返回值类型 方法名称 (参数列表) { 方法体 }
-
静态私有方法解决多个静态方法之间重复代码的问题
格式:
private static 返回值类型 方法名称 (参数列表) { 方法体 }
//接口 public interface AD { //定义抽象方法,能够进行物理攻击 public abstract void physicalAttrack(); //新添加一个方法,应为默认方法, // 当为抽象方法时,实现类应该重新覆盖重写,否则会报错 public default void recieve(int hp){ System.out.println("复活"); methodCommonRecieve(hp); } //定义静态方法 public static void methodStatic(){ System.out.println("这是静态方法"); methodCommonStatic(); } //普通私有方法 private void methodCommonRecieve(int hp){ System.out.println("加血:" + hp); } //静态私有方法 private static void methodCommonStatic(){ System.out.println("AAAAA"); } }
接口常量
-
接口中的常量需用
public static final
三个关键字修饰例如:
public static final int NUM_OF_HP = 10;
-
接口中的常量必须进行赋值
-
接口常量的名称使用完全大写的字母,用下划线分隔
继承多个接口
-
接口无静态代码块或者构造方法
-
一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
格式:
public class 实现类名称 implements 接口1, 接口2
-
如果实现类所实现的多个接口中存在重复的抽象方法,只需要覆盖重写一次
-
如果实现类所实现的多个接口中存在重复的默认方法,那么实现类一定要对冲突的默认方法覆盖重写
-
-
注意:如果一个类的直接父类的方法和接口中的默认方法产生冲突,优先调用父类中的方法,即继承优先于接口
-
一个接口可以继承多个接口
格式:
public interface 接口3 extends 接口1, 接口2
- 如果多个父接口中存在重复的抽象方法,没关系
- 如果多个父接口中存在重复的默认方法,那么子接口必须对默认方法覆盖重写
package character2; public interface AD { public abstract void attrack(); public default void method(){ System.out.println("这是物理攻击英雄"); } } //////////////////////////////// package character2; public interface AP { public abstract void attrack(); public default void method(){ System.out.println("这是魔法攻击英雄"); } } ///////////////////////////////// package character2; public interface ADAPHero extends AD, AP { //重复的抽象方法不需要覆盖重写 //重复的默认方法需要在子接口覆盖重写 @Override default void method() { System.out.println("这是进行物理攻击和魔法攻击的英雄"); } } ///////////////////////////////// package character2; public class Hero implements ADAPHero { //重复的抽象方法在实现类需要覆盖重写 @Override public void attrack() { System.out.println("抽象方法,物理魔法攻击"); } public static void main(String[] args) { Hero hero = new Hero(); hero.attrack(); hero.method(); } }
原文链接:https://www.cnblogs.com/geqianLee/p/13025573.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- 类的继承,方法重新中修饰符如何定义 2020-06-10
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 错误: 在类中找不到 main 方法, 请将 main 方法定义为: & 2020-06-06
- Java生鲜电商平台-生鲜电商接口幂等性原理与防重复提交方案( 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash