接口 interface

1、什么情况下要声明接口?
(1)当多个类具有相同的行为特征,但是这些类又没有父子类的关系,那么可以通过抽取这些共同的行为特征到接口中,然后通过接口来统一管理他们。
(2)接口是一种行为标准,例如:比较大小、操作数据库、对象的序列化等,如果想要符合这个标准,就可以让自己的类实现这个接口即可。
(3)面向对象的编程原则:面向接口编程,目的是解耦合。
2、如何声明一个接口?
【修饰符】 interface 接口名 【extends 接口们】{
}
3、接口的特点
(1)接口不能实例化,即不能直接创建对象
(2)接口可以与实现类的对象构成多态引用
(3)接口中的成员
JDK1.8之前:
A:public static final:常量
B:public abstract:抽象方法
C:内部接口
JDK1.8之后:
D:public static :静态方法
E:public default:默认方法
(4)接口就是用来被实现的。一个类实现接口时,必须要重写(实现)接口的所有的抽象方法,否则这个类也得是抽象类。
(5)一个类可以同时实现多个接口。
(6)一个类可以同时继承父类,又实现接口,那么这个时候必须先继承,后实现接口。
(7)接口也可以继承多个接口。
4、JDK1.8的静态方法和默认方法
静态方法:接口名.静态方法名调用
默认方法:接口的实现类的对象.方法名
5、默认方法的冲突问题
(1)一个类实现了多个接口,多个接口中有相同的默认方法
实现类可以选择保留其中一个或多个,通过“接口名.super.方法”保留;
实现类也可以选择一个都不保留,完全重写。
(2)一个类继承了父类,又实现了接口,当父类中有与接口的默认方法一样的方法时
默认:保留的是父类的
主动:如果要保留父类的,通过“super.方法”
如果要保留父接口的,通过“接口名.super.方法”保留;
可以选择都不要,完全重写
6、属性冲突问题
一个类继承了父类,又实现了接口,父类中的常量属性与接口中的常量属性,名称和类型一致时,会导致错误,xx 属性 是模糊不清的(is ambiguous)
7、静态方法冲突
一个类继承了父类,又实现了接口,父类中有和接口中一样的静态方法时,默认选择的是父类。
例如

public class USBTest {
public static void main(String[] args) {
Computer com = new Computer();
//1.创建接口实现类的对象
Flash flash = new Flash();
com.transferData(flash);

	//2.创建接口实现类的匿名对象
	com.transferData(new Printer());
	
	//3.创建接口匿名实现类的对象
	USB usb1 = new USB(){
		public void start(){
			System.out.println("相机开始工作");
		}
		public void stop(){
			System.out.println("相机结束工作");
		}
	};
	com.transferData(usb1);
	
	//4.创建接口匿名实现类的匿名对象
	com.transferData(new USB(){
		public void start(){
			System.out.println("键盘开始工作");
		}
		public void stop(){
			System.out.println("键盘结束工作");
		}
	});
	
}

}

interface USB{

void start();

void stop();

}

class Computer {

public void transferData(USB usb){//多态:USB usb = new Flash();
	usb.start();
	
	System.out.println("========具体的数据传输过程===========");
	
	usb.stop();
}

}
//U盘
class Flash implements USB{

@Override
public void start() {
	System.out.println("U盘开始工作");
}

@Override
public void stop() {
	System.out.println("U盘结束工作");
}

}
//打印机
class Printer implements USB{

@Override
public void start() {
	System.out.println("打印机开始工作");
}
@Override
public void stop() {
	System.out.println("打印机结束工作");
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值