Java编程思想学习笔记——接口

1.抽象类和抽象方法

抽象方法:不完整的,仅有声明而没有方法体。

   abstract void f();

抽象类:包含抽象方法的类。(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的。)

1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的。编译器通过这种方式保证了
抽象类的纯粹性。

public abstract class Person {
    public abstract void eat();
    public abstract void pee();
    public abstract void sleep();
}



//不能直接用抽象类创建对象
//Person p = new Person();//错误

2.一个类从抽象类中继承,若想创建改类的对象,就必须实现基类中的所有抽象方法。否则将无法创建该类的对象,
并且导出类也是抽象类。

//一个类继承自抽象类,必须实现这个抽象类中的所有抽象方法
public class Male extends Person {
    @Override
    public void eat() {
        System.out.println("Male eat a lot!");
    }

    @Override
    public void pee() {
        System.out.println("Male pee by standing up");
    }

    @Override
    public void sleep() {
        System.out.println("Male sleep");
    }
}


//创建改导出类的对象
Person p = new Male();

3.可以创建一个没有任何抽象方法的抽象类。(若有这样一个类,包含任何抽象方法都显得没有实际意义,而且我们也想阻止产生这个类的任何对象)

4.抽象类并不需要所有的方法都是抽象的。

作用:
1.明确类的抽象性,并告诉用户和编译器打算怎样来使用它们。
2.抽象类是很有用的重构工具,使我们能很容易的将公共方法沿着继承层次向上移动(也就是将公共方法抽取重构到抽象类中)

2.接口

interface关键字使抽象更进一步,产生一个完全抽象的类,没有提供任何具体的实现。(只有方法名,参数列表和返回类型,没有任何方法体。接口只提供了形式,而未提供任何具体实现)

public interface People {
    void eat();
    void sleep();
    void pee();
}

一个接口表示:“所有实现了该特定接口的类看起来都像这样”

接口被用来建立类和类之间的协议(protocol)

接口不仅仅是一个极度抽象的类,因为接口允许我们通过创建一个能够被向上转型为多种基类的类型
来实现类似于多重继承的特性。(Java只支持单继承,但可以通过实现接口来达到多继承的效果)

接口中可以包含域,但是这些域隐式地是static和final的。

使用implements关键字让一个类遵循某个接口(或是一组接口)。它表示:"接口只是它的外貌(what it looks like),我们用类实现接口来声明它是如何工作的(how it works)"

3.完全解耦

  • 策略设计模式: 创建根据所传递的参数对象的不同而具有不同的行为的方法(这类方法包含所要执行的算法中
    固定不变的部分,而策略包含变换的部分,策略就是传递进去的参数对象)

  • 适配器设计模式: 适配器中的代码将接受所拥有的接口,并产生所需要的接口。
    将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具复用性。

posted @ 2015-07-22 23:13  onerepublic  阅读(844)  评论(0编辑  收藏  举报