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{@Overridepublic void fun() {System.out.println("我不想说话");}@Overridepublic 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();}
}
1.2 接口的实际应用
interface USB{public void start();public void stop();
}class Computer{public void plugin(USB usb){usb.start();usb.stop();}
}class Flash implements USB{@Overridepublic void start() {System.out.println("USB开始工作");}@Overridepublic void stop() {System.out.println("USB结束工作");}
}
class KeyBoard implements USB{@Overridepublic void start() {System.out.println("键盘开始工作");}@Overridepublic 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 抽象类与接口的区别
接口,抽象类,类,对象
不同点:
1 定义关键字
2 组成
3 权限
4 子类实现
5 关系
6 设计模式