接口当一个抽象类中的方法 全都是抽象方法的时候 这时可以将该抽象类
用另一种形式定义和表示 就是 interface接口
接口内除了抽象方法之外 还有全局常量
接口常见成员 这些成员均有固定修饰符
1 抽象方法 public static final
2 全局常量 public abstract
接口中成员都是公共的权限
定义接口的关键字不是class 是interface
interface Demo{
public static final int NUM = 4;
abstract void show();
abstract void show2();
}
class DemImp implements Demo{
public void show()
{
}
public void show2()
{
}
}
public class InterfaceDemp {
public static void main(String[] args) {
//三个输出都对 static 常量当然可以直接调用
DemImp d = new DemImp();
System.out.println(d.NUM);
System.out.println(DemImp.NUM);
System.out.println(Demo.NUM);
}
}
接口就应该去实现implements
继承可以拿一些我只需要的 但实现是你有的我全部都要拿过来
类与类之间是继承关系 类与接口之间是实现关系
多接口
java中不直接支持多继承 因为会出现调用的不确定性
所以java将多继承进行改良 在java中变成了多实现
一个类可以实现多个接口
接口细节
一个类在继承另一个类的同时 还可以实现多个接口
class Test2 extends Q implements A,Z
{
}
接口出现避免了单继承的局限性 但接口扩展了功能让其变得更强大
接口与接口之间是继承关系 而且接口可以多继承
interface QQ extends CC,MM {
}
接口特点
对外暴露的规则
接口是程序的功能扩展
接口的出现降低耦合性
接口可以用来多实现接口中的任何域自动式final和static的、
接口是实现多重继承的途径 而生成遵循某个接口的对象的典型方式就是工厂方法设计模式
与直接调用构造器不同 我们在工厂对象上调用的是创建方法 而该工厂对象将生成接口的某个实现的对象
工厂模式 主要用来实例化有共同接口的类 可以动态决定应该实例化哪一个类
public interface Product{}
//实现了产品接口的产品类
public class Washer implements Product{
public Washer(){
System.out.println("洗衣机被制造了");
}
}
public class Icebox implements Product{
public Icebox(){
System.out.println("冰箱被制造了");
}
}
public class AirCondition implements Product{
public Icebox(){
System.out.println("空调被制造了");
}
}
//工厂类
public interface Factory(){
public Product create();//创建方法
}
//工厂方法核心 具体差个内建产品对象的具体工厂类
//创建洗衣机的工厂
public class CreateWasher implements Factory{
public Product create(){
return new Washer();
}
}
//创建冰箱的工厂
public class CreateIcebox implements Factory{
public Product create(){
return new Icebox();
}
}
//创建空调的工厂
public class CreateAirCondition implements Factory{
public Product create(){
return new AirCondition();
}
}
public class Business(){
public static void produceProduct(Factory factory){
Product p = factory.create();
}
public static void main(String[] args){
produceProduct(CreateWasher);
produceProduct(CreateIcebox);
}
}
工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,
互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。