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。

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{
@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 抽象类与接口的区别
接口,抽象类,类,对象

不同点:
1 定义关键字
3 权限
4 子类实现
5 关系
6 设计模式
















