写给自己的JAVA工程师之路-接口

来源:互联网 发布:刘嘉玲被强奸知乎 编辑:程序博客网 时间:2024/06/16 06:23

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();}}

注意:关于接口的组成描述,以下两段代码是完全一样的,大部分情况把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{@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 设计模式


原创粉丝点击