java学习笔记17(接口的概述)

接口的概述

接口就是一种公共的规范标准
只要符合规范标准,就可以通用

接口定义的基本格式

接口就是多个类的公共规范
接口是一个引用数据类型,最重要的内容就是其中的抽象方法
定义一个接口的格式:

public interface 接口名称
{
   //接口内容
}

备注:换成关键字interface之后,编译生成的字节码文件仍然是,.java–>.class
java7接口包含内容:常量,抽象方法
java8可以额外包括:默认方法静态方法
java9还可以包含:私有方法

接口使用步骤:
1 接口不能直接使用,必须要有一个“实现类”来“实现”该接口
public class 实际类名称 implements 接口名称
{
}
2接口的实现类必须覆盖重写(实现)接口中所有抽象方法
实现:去掉abstract关键字,加上方法体大括号
3 创建实现类的对象,进行使用

抽象方法

//格式:public abstract 返回值类型 方法名称(参数列表);
//注意事项:
//1 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
//2 这两个关键字修饰符,可以选择性省略
//接口
public interface MyInterfaceAbstract
{
   public abstract void methodAbs();
   //public void methodAbs1();
  // abstract void methodAbs2();
   //void methodAbs3();
}

//抽象类的实现对象
public class MyInterfaceAbstractImp1 implements MyInterfaceAbstract
{
    @Override
    public void methodAbs()
    {
       System.out.println("抽象方法")}
}
//创建实现类的对象
public class Demo
{
    public static void main(String[] args)
    {
       MyInterfaceAbstractImp1 imp1=new  MyInterfaceAbstractImp1();
       imp1.methodAbs();

    }
}

默认方法

//方法定义
/*
  从java 8开始,接口里允许定义默认方法
  格式:
  public default 返回值类型 方法名称(参数列表){
      方法体
  }
  备注:接口当中的默认方法,可以解决接口升级的问题
  */
public interface MyInterfaceDefault
{
   public abstract void methodAbs();
   public default void methodDefault()
   {
      System.out.println("默认方法");
   }
}
实现类a
public class MyInterfaceDefaultA implements MyInterfaceDefault
{
    @Override
    public void methodAbs()
    {
       System.out.println("抽象方法a")}
}
实现类b
public class MyInterfaceDefaultB implements MyInterfaceDefault
{
    @Override
    public void methodAbs()
    {
       System.out.println("抽象方法b")}
     public default void methodDefault()
   {
      System.out.println("默认方法b");
   }
}

}
//1 接口的默认方法,可以通过接口实现类对象,直接调用
//2 接口的默认方法,也可以被接口实现类覆盖重写
public class Demo2
{
   public static void main(String[] args)
   {
       MyInterfaceDefaultA a=new MyInterfaceDefaultA();
       a.methodAbs();//实际上在调用右侧实现类
       a.methodDefault();//调用默认方法,如果实现类中没有,那么向上找接口
       MyInterfaceDefaultB b=new MyInterfaceDefaultB();
       b.methodDefault();
   }
}

静态方法

/*
  格式:public static 返回值类型 方法名称(参数列表)
  {
      方法体
  }
*/
public class MyInterfaceStatic
{
   public static void methodStatic()
   {
      System.out.println("这是一个静态方法");
   }
}
public class MyInterfaceSaticImp1 implements MyInterfaceStatic
{
}
/*
   注意:不能通过接口实现类来调用接口当中的静态方法
   格式 接口名称.静态方法名(参数);
*/
public class demo
{
   public static void main(String[] args)
   {
       MyInterfaceStatic.methodStatic();
   }
}

私有方法

/*
  定义私有方法;
  1 普通私有方法:解决多个默认方法之间重复代码问题
  格式:private 返回值类型 方法名称(参数列表)
  {
     方法体;
  }
  2 静态私有方法:解决多个静态方法之间重复代码问题
  格式:private static 返回值类型 方法名称(参数列表)
  {
      方法体;
  }
*/
public interface MyInterfacePrivateA
{
   public default void methodDefault1()
   {
      System.out.println("默认方法1");
      
   }
   public default void methodDefault2()
   {
      System.out.println("默认方法2");
   }
   private void methodCommmon()
   {
      System.out.println("aaa");
   }
}
public class MyInterfacePrivateAImp1 implements MyInterfacePrivateA
{
}

接口中常量的定义和使用

/*
 接口当中也可以定义“成员变量”,但必须使用public static final三个关键字进行修饰。
 从效果上看,这其实就是接口的常量
 格式 public static final 数据类型 常量名称=数据值;
 final修饰不可改变
 注意:接口中变量必须赋值
*/
public interface MyInterfaceConst
{
 public static final int num=10;
 //一旦赋值,不可修改
}

接口总结

1 成员变量其实是常量,格式:
[public] [static] [final] 常量名称=数据值;
注意:
常量必须赋值,一旦赋值不可改变
常量名称大写,用下划线分割
2 抽象方法
[public][abstract] 返回值类型 方法名称(参数列表);
注意:实现类要重写抽象方法
3 默认方法
public default 返回值类型 方法名称(参数列表)
{方法体}
注意 默认方法可以被覆盖重写
4 静态方法
【public】static 返回值类型 方法名称(参数列表) {方法体}
注意 应该通过接口名称进行调用
5 私有方法
private 返回值类型 方法名称(参数列表) {方法体}
private static 返回值类型 方法名称(参数列表) {方法体}
只有接口自己调用

继承父类并实现多个接口

接口不能有静态代码快和构造方法
一个类可以实现多个接口
多个接口中覆盖抽象方法重复,只用复写一个
如果没有实现所有抽象方法,那么实现类一定是抽象类
如果接口中默认方法冲突,那么一定要重写冲突方法
一个类如果直接父类当中的方法,和接口中的默认方法产生了冲突,优先使用父类当中的方法

接口中的多继承

1 类与类之间是单继承的,直接父类只有一个
2 类与接口之间是多实现的,一个类可以实现多个接口
3 接口和接口之间是多继承的

一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。
接口的继承使用 extends 关键字,子接口继承父接口的方法。
如果父接口中的默认方法有重名的,那么子接口需要重写一次。(带着default关键字)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值