49_面向对象_22_接口详解

接口(interface)

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法) 都有!
  • 接口:只有规范!

为什么需要接口?

  1. 接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。
  2. 抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

从接口的实现者角度看,接口定义了可以向外部提供的服务。

从接口的调用者角度看,接口定义了实现者能提供那些服务

如何定义接口?

**格式:**
[访问修饰符]  interface 接口名   [extends  父接口1,父接口2…]  {
    常量定义//接口中的属性只能是常量,总是:public static final 修饰。不写也是。
    方法定义//接口中的方法只能是:public abstract。 省略的话,也是public abstract.
    /*
        访问修饰符:只能是public或默认。
        接口名:和类名采用相同命名机制
        extends:接口可以多继承
    */
}

接口的本质探讨

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。

接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。

OOP的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计 模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。

接口使用要点

  1. 子类通过implements来实现接口中的规范
  2. 接口不能创建实例,但是可用于声明引用变量类型。
  3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
  4. 接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。
  5. 常量必然是:public static final。 我们不加这些修饰符,也是这样。
  6. 方法必然是:public abstrac。 我们不加这些修饰符,也是这样。
  7. 接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。
public interface MyInteface {
    //接口中只有常量和抽象方法
    /*public static final*/ String MAX_GREAD = "BOSS";
    int MAX_SPEED = 120;
    /*public abstract*/ void test01();
    public int test02(int a,int b);
}
public interface Flyable {
    int MAX_SPEED = 11000;
    int MIN_HEIGHT = 1;
    void fly();
}

interface Attack {
void attack();
}

class Plane implements Flyable{
    @Override
    public void fly() {
        System.out.println("飞机靠发动机飞!");
    }
}

class Man  implements Flyable{
    @Override
    public void fly() {
        System.out.println("跳起来,飞!");
    }
}

class Stone implements Flyable, Attack{
    int weight;
    @Override
    public void fly() {
        System.out.println("被人扔出去,飞!");
    }

    @Override
    public void attack() {
        System.out.println("石头攻击!");
    }
}
public class Test {
    public static void main(String[] args) {
    Flyable f = new Stone();
    f.fly();
    }
}
public interface InterfaceA {
void aaa();
}

interface InterfaceB {
void bbb();
}

interface InterfaceC extends InterfaceA,InterfaceB {
void ccc();
}

class TestClass implements InterfaceC{
    @Override
    public void aaa() {
    // TODO Auto-generated method stub
    }

    @Override
    public void bbb() {
    // TODO Auto-generated method stub
    }

    @Override
    public void ccc() {
    // TODO Auto-generated method stub
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值