1.1 接口的基本概念



接口是一种特殊的类,但是在接口里面的组成与类不同,比类的组成部分简单,主要由抽象方法和全局常量所组成。而接口使用interface关键字定义。


interface A{
	public static final String MSG="HELLO WORLD";
	public abstract void print();
}



1)接口一定要定义子类,子类利用implements关键字实现接口,一个子类可以实现多个接口。


2)接口的子类如果不是抽象类,那么必须覆写接口的全部抽象方法。


3)接口的对象利用子类的向上转型进行实例化对象。


4)抽象类可以实现接口,但是接口不能继承抽象类,一个接口却可以使用extends继承多个父接口。


5)虽然接口本身只能够有抽象方法和全局常量,但是内部结构是不受到限制的,那么也就是说一个接口的内部可以继续定义内部类,内部抽象类和内部接口。如果一个内部接口上使用了static定义,那么这个内部接口就属于外部接口。


6)接口中的权限统一为public,一般不会定义全局常量。



实际开发中接口的三个原则:


制定操作标准。


表示一种能力。


将服务器端的远程方法视图提供给客户端。



神奇操作:B和A鸟关系都没有,但是可以转换,是因为X是子类。


interface A{
	public static final String MSG="HELLO WORLD";
	public abstract void print();
}
interface B{
	public abstract void fun();
}
class X implements A,B{

	@Override
	public void fun() {
		System.out.println("我不想说话");
	}
	@Override
	public void print() {
		System.out.println(MSG);
	}
	
}
public class InterDemo {
	public static void main(String[] args) {
//		X x=new X();//实例化子类对象
//		A a=x;//子类对象为父接口实例化
//		B b=x;//子类对象为父接口实例化
		
		
		A a=new X();//子类对象为父接口实例化
		B b=(B)a;//我也不理解
		b.fun();
	}
}



注意:关于接口的组成描述,以下两段代码是完全一样的,大部分情况把abstract省掉,写上public。 


JAVA开发一个接口需要多久_JAVA开发一个接口需要多久




1.2 接口的实际应用




JAVA开发一个接口需要多久_抽象类_02




interface USB{
	public void start();
	public void stop();
}

class Computer{
	public void plugin(USB usb){
		usb.start();
		usb.stop();
	}
}

class Flash implements USB{

	@Override
	public void start() {
		System.out.println("USB开始工作");
	}
	@Override
	public void stop() {
		System.out.println("USB结束工作");
	}
}
class KeyBoard implements USB{

	@Override
	public void start() {
		System.out.println("键盘开始工作");
	}
	@Override
	public void stop() {
		System.out.println("键盘结束工作");
	}
}
public class InterDemo {
	public static void main(String[] args) {
		Computer c=new Computer();
		c.plugin(new Flash());
		c.plugin(new KeyBoard());
	}
}


1.3 工厂设计模式


现在有这样一个代码:


interface Fruit{
	public void eat();
}

class Apple implements Fruit{
	public void eat(){
		System.out.println("吃苹果");
	}
}
public class InterDemo {
	public static void main(String[] args) {
		Fruit f=new Apple();
	}
}




那么如果要想解决这个问题,可以参考Java的可移植性的实现原理:


不可移植性:程序 → 操作系统


可移植性:程序 → JVM → 操作系统


interface Fruit{
	public void eat();
}

class Apple implements Fruit{
	public void eat(){
		System.out.println("吃苹果");
	}
}
class Cherry implements Fruit{
	public void eat(){
		System.out.println("吃樱桃");
	}
}
class Factory{
	public static Fruit getIns(String classname){
		if("apple".equals(classname)){
			return new Apple();
		} else if ("cherry".equals(classname)) {
			return new Cherry();
		}else {
			return null;
		}
	}
}
public class InterDemo {
	public static void main(String[] args) {
		Fruit f=Factory.getIns(" ");
	}
}


1.4 代理设计模式


所谓的代理结构指的是在接口上的一种应用,一个接口有一个核心的操作主题,但是在整个操作过程中,只依靠核心的操作主题是无法完成所需要功能的,那么需要一个代理的主题。



interface Subject{//核心操作主题
	public void b();
}
class RealSubject implements Subject{
	public void b(){
		System.out.println("进行数据操作");
	}
}
class ProxySubject implements Subject{
	private Subject subject;//代理真实主题
	public ProxySubject(Subject subject){
		this.subject=subject;
	}
	public void a(){
		System.out.println("数据库连接");
	}
	public void b(){
		this.a();
		subject.b();
		this.c();
	}
	public void c(){
		System.out.println("断开连接");
	}
}
public class InterDemo {
	public static void main(String[] args) {
		Subject s=new ProxySubject(new RealSubject());
		s.b();
	}
}


1.5 抽象类与接口的区别


接口,抽象类,类,对象



JAVA开发一个接口需要多久_java_03




不同点:



1 定义关键字


3 权限


4 子类实现


5 关系


6 设计模式