接口
1、 接口的定义:
接口严格来讲是一个只有全局常量和抽象方法的特殊的类,接口的主要功能是解决但继承局限问题。
1.1使用interface关键字定义接口:
Interface A{
Public static final String MSG=”Hello” ………//全局常量
Public abstract void print();……… //抽象方法
}
1.2由于接口里存在抽象方法,所以接口对象不可以直接使用关键字new进行实例化,所以接口有如下几点使用原则:
1) 接口必须要有子类,但一个子类可以使用implements关键字实现多个接口
Class A implements C,B{ }
2) 接口的子类如果不是抽象类,必须要覆写接口的全部抽象方法
3) 接口的对象可以利用子类对象的向上转型进行实例化操作
例:interface A{}
interface B{ }
class x implements A,B{}
X x=new x(); //实例化子类对象
A a=x; //向上转型
B b=x //向上转型
1.3当一个类既要继承一个类又要实现一个接口时要先extends再implements.
1.4以下;两种接口的定义方法是完全一样的:
Interface A{ Interface A{
Public static final String MSG=”Hello”; String MSG=”Hello”;
Public abstract void fun();} void fun();}
在接口里面没有写public,其最终的访问权限也是public,而不是default。
1.5接口可以用extends继承类:
Interface B extends A,C{}
但子类要覆写A,B,C所有抽象方法
1.6在接口里可以定义普通内部类,抽象内部类,内部接口。在一个接口的内部如果使用static定义一个内部接口表示定义了一个外部接口。
2、 接口的实际应用——标准
应用实例:
Interface USB{//定义USB标准
Public void start();
Public voidstop();
}
Class computer{//定义电脑
Public void plugin(USB usb){//插入
Usb.start();
Usb.stop();
}
}
Class flash implements USB{// 定义U盘
Public void start(){
System.out.println(“U盘开始使用”);
}
Public void stop(){
System.out.println(“U盘结束使用”);
}
}
Public static testDemo{
Public static void main(String[] args){
Computer com=new computer();
Com.plugin(new Flash);
}
}
3、 接口的应用——工厂设计模式
应用实例:
package testDemo;
interface Fruit{//fruil接口
public void eat();
}
class Apple implements Fruit{//苹果
public void eat(){
System.out.println("***吃苹果");
}}
class Orange implements Fruit{//橘子
public void eat(){
System.out.println("***吃橘子");
}}
class Factory{//工厂类
public static Fruit getInstance(String className){
if("apple".equals(className))
return new Apple();
else
return new Orange();
}}
public class testDemo{
public static void main(String[] args){
Fruit f=Factory.getInstance("Apple");
f.eat();
}}
4、接口的应用——代理设计模式
package testDemo;
interface Subject{//整个操作的核心主题
public void make();//核心功能
}
class RealSubject implements Subject{
public void make(){
System.out.println("正在执行");
}
}
class ProxySubject implements Subject{
private Subject subject;
public ProxySubject(Subject subject){
this.subject=subject;
}
public void prepare(){
System.out.println("执行前");
}
public void make(){
this.prepare();
this.subject.make();
this.finish();
}
public void finish(){
System.out.println("执行后");
}
}
public class testDemo{
public static void main(String[] args){
Subject sub=new ProxySubject(new RealSubject());
sub.make();//调用的是代理主题操作
}}
真实主题类只完成核心任务,而代理主题类完成所有与核心业务有关的辅助操作
4、 抽象类与接口的区别
No |
区别 |
抽象类 |
接口 |
1 |
关键字 |
Abstract class |
Interface |
2 |
组成 |
构造方法、普通方法、抽象方法、static方法、常量、变量 |
全局常量、抽象方法 |
3 |
子类使用 |
Class 子类、extends抽象类 |
Class子类 implements 接口.. |
4 |
关系 |
抽象类可以实现多个接口 |
接口不能继承抽象类,可以继承多个父接口 |
5 |
权限 |
可以使用各种权限 |
只能使用public权限 |
6 |
限制 |
单继承局限 |
没有单继承局限 |