java基础学习九之接口

1.什么是接口

         接口从语法角度来说像是一种特殊的抽象类,两者都可以包含抽象方法且不能创建对象。接口是一种标准,通常用来约束其子类(实现类)应具备的功能。
优点:

  • 程序的耦合度降低
  • 更自然的使用多态
  • 设计与实现完全分离
  • 更容易搭建程序框架
  • 更容易更换具体实现

2.接口的定义

        使用interface 关键字定义接口
语法:interface 接口名{ }

//1.接口中的属性都是公开静态常量,隐式使用public static final 修饰。
//2.接口中的方法都是公开抽象方法,隐式使用public abstract修饰
interface MyInterface{
    public static final int NUM = 3;//常量全英文大写
    int AGE = 18;//默认被public static final修饰
    public abstract void test();
    void test2();//默认被public abstract修饰
}

JDK1.8以前接口中只能有公有静态常量和公有抽象方法(如上代码)
JDK1.8以后接口中可以定义公有静态方法和被default修饰的默认方法(代码如下)

//1.接口中的属性都是公开静态常量,隐式使用public static final 修饰。
//2.接口中的方法都是公开抽象方法,隐式使用public abstract修饰
interface MyInterface{
    public static final int NUM = 3;//常量全英文大写
    int AGE = 18;//默认被public static final修饰
    public abstract void test();
    void test2();//默认被public abstract修饰
    
    //JDK1.8之后可以定义公有静态方法和默认方法
    public static void prt(){//可通过 “接口名.方法名”调用
        System.out.println("这是一个静态方法");
    }
    default void prt2(){//需要通过此接口的实现类对象调用
        System.out.println("这是接口中定义的默认方法");
    }
}

3.接口与抽象类的区别

相同点:

  • 可编译成字节码文件。
  • 不能创建对象。
  • 可以作为引用类型。
  • 具备0bject类中所定义的方法。

不同点:

  • 所有属性都是公开静态常量,隐式使用public static final修饰。
  • 所有方法都是公开抽象方法,隐式使用public abstract修饰。
  • 没有构造方法、动态代码块、静态代码块。

4.接口的规范

        任何类在实现接口时,必须实现接口中所有的抽象方法,否则此类为抽象类
实现接口中的抽象方法时,访问修饰符必须是public。

5.接口引用

        同父类一样,接口也可声明为引用,并指向实现类对象。
注意:

  • 仅可调用接口中所声明的方法,不可调用实现类中独有的方法。
  • 可强转回实现类本身类型,进行独有方法调用。

6.接口的多态

        声明一个接口,实例化他的实现类

MyInterface myInterface = new MyInterfaceImpl();

但是不同引用类型,仅可调用自身类型中声明的方法。
对于称呼的纠正;

  • 某个类实现了某个接口; 实现类 -> 父接口;
  • 某个类继承了一个类; 子类(基类) -> 父类(超类)

7.常见关系

类/接口

  • 类与类之间的关系:
    1. 可以是继承关系, extends来描述继承关系; 单继承

  • 类与接口之间的关系:
    1. 是一个实现的关系,implements 某个类实现了多个接口; 多实现
    2. 语法: A implements IB1,IB2,IB3…{}

  • 接口与接口之间的关系:
    1. 接口继承接口; 多继承
    2. extends关键字来描述;
    3. 语法:A extends IB1,IB2,IB3…{},
    4. 接口与接口之间继承会将我们所有的属性,抽象方法全部继承过来

    接口继承多接口问题:
        属性名相同:
            一个接口继承多个接口的时候,如果多个接口里面常量名字一样;不会继承
        多个接口默认方法名字都相同:
            不允许的;如果有必须要在子类接口里面进行重写;

8.接口回调与核心

        先有使用者,再有实现者,称之为回调
接口核心点: 先存在接口[指定一个接口]; 实现者 使用者 都遵从接口开发;

//充钱的接口
public interface Charge {
	//充钱的方法
	public boolean pay(int money);
}
//充钱接口的使用者
public class Tecent {
	//谁要使用服务,谁就来真正的充钱
	public void service(Charge cg) {
		System.out.println("想要服务,请先充值");
		boolean bl = cg.pay(200); //服务的使用者
		if(bl) {
			System.out.println("收到钱了,马上办事");
		}
	}
}
//充钱接口的实现者
public class MyGame implements Charge{
	//你的这个游戏,引导别人去充钱;
	public boolean pay(int money) {
		//玩家点击按钮,然后调用我游戏里面的充值服务;
		System.out.println("请充钱"); //服务的提供者
		return true;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值