JAVASE -接口和多态

接口

  1. 生活中接口

生活常见接口:
USB Type-C UBS-C 雷电 RJ45 HDMI VPA PCI-E Lighting 3.5MM M.2 SATA

接口有什么作用?
USB
U盘 移动硬盘 鼠标 键盘 耳机 网卡 声卡 摄像头…
拓展功能,链接外部设备

USB接口限制了什么?
制定规范,制定协议
符合USB接口规范,USB接口协议才可以连接

java中的接口

关键字:
interface 接口
UI Design User Interface

格式:
interface 接口名 {
成员变量
成员方法
}
要求:
1. 接口名要求符合命名规范,大驼峰命名法!!!见名知意
2. 成员变量【缺省属性】 public static final 定义时必须初始化
3. 成员方法【缺省属性】 public abstract 方法没有方法体

package com.qfedu.b_interface;

/**
 * 自定义接口,接口名A
 * 
 * 两个问题:
 * 		1. USB接口,尺寸固定之后,有人改吗?
 * 			没有人修改
 *		2. USB接口做什么,是接口决定?还是设备决定?
 *			设备
 * 思考:
 * 		静态?
 * 		abstract?
 * 		final?
 * 		继承?
 * @author Anonymous
 *
 */
interface A {
	/* 成员变量
	 * The blank final field num may not have been initialized
	 * 
	 * 通过Outline工具,发现当前成员变量存在public static final修饰,但是代码并没有
	 * 显式当前修饰内容
	 * 【缺省属性】 public static final
	 */
	int num = 10;
	
	/*
	 * 成员方法
	 * Abstract methods do not specify a body
	 * 
	 * 错误提示,当前代码中test方法是一个abstract修饰方法,并且在Outline发现方法
	 * 存在一个A标记,证明为abstract,但是代码中并没有显式展示abstract修饰
	 * 【缺省属性】public abstract
	 */
	void test();
}

public class Demo1 {

}

java中类遵从接口的格式写法

/**
 * B类通过关键字 implements 遵从接口A,要求是实现接口A中的所有
 * 缺省属性为public abstract修饰的方法。
 * @author Anonymous
 *
 */
class B implements A {

	@Override
	public void test() {
		System.out.println("B类遵从接口A,实现test方法");
	}

}

一个类可遵从多个接口 只需在implements后面隔开写接口名即可

接口也可以继承接口
package com.qfedu.b_interface;

/*
 * USB1.0协议
 */
interface Usb1_0 {
	void usb1_0();
}

/*
 * USB2.0协议
 */
interface Usb2_0 {
	void usb2_0();
}

/*
 * USB3.0协议
 */
interface Usb3_0 {
	void usb3_0();
}

/**
 * 小米电脑上的USB接口需要兼容USB1.0 USB2.0 USB3.0 协议
 * 
 * 接口可以使用extends完成继承,并且允许多继承存在
 * @author Anonymous
 *
 */
interface UsbMi extends Usb1_0, Usb2_0, Usb3_0 {
	void usbMi();
}

class MiGameComputer implements UsbMi {

	@Override
	public void usb1_0() {
		System.out.println("兼容USB1.0");
	}

	@Override
	public void usb2_0() {
		System.out.println("兼容USB2.0");		
	}

	@Override
	public void usb3_0() {
		System.out.println("兼容USB3.0");		
	}

	@Override
	public void usbMi() {
		System.out.println("小米USB接口");		
	}
	
}

public class Demo3 {
	public static void main(String[] args) {
		new MiGameComputer().usb1_0();
		new MiGameComputer().usb2_0();
		new MiGameComputer().usb3_0();
		new MiGameComputer().usbMi();
	}
}
abstract :

以abstract修饰的方法不能有方法体,但是修饰后的类遵从接口不必重写方法

default :

JDK1.8 更新特征
default关键字可以在接口中使用,用于修饰方法,使用default关键字修饰的方法在接口中是允许有方法体
【默认方法】【非强制重写方法】

多态:

  1. 一个方法需要的参数是父类,传入实际参数是父类对象本身,或者其子类对象都是OK的!
  2. 一个方法返回值类型是父类,实际返回的数据时父类对象本身,或者其子类对象也是OK的!
  3. 引用数据类型之间的强制类型转换时允许使用,但是要求明确真实数据类型是一致的,不然会导致异常出现ClassCastException

1. 父类的引用指向子类的对象

2. 或者接口的引用指向遵从接口的类对象

这就是多态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值