资讯专栏INFORMATION COLUMN

《Java编程思想》笔记9.接口

JessYanCoding / 3174人阅读

摘要:抽象类和抽象方法抽象方法这种方法是不完整的,仅有声明而没有方法。创建抽象类和抽象方法非常有用,因为他们可以使累的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。接口用于建立类于类之间的协议。与抽象类相同,防止客户端程序员创建该类对象。

点击进入我的博客

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。

9.1抽象类和抽象方法

抽象方法:这种方法是不完整的,仅有声明而没有方法。用abstract修饰的方法。

抽象类:包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。用abstract修饰的类。

可以创建一个没有抽象方法的抽象类。

创建抽象类和抽象方法非常有用,因为他们可以使累的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。抽象类还是很有用的重构工具,因为它们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。

9.2 接口

interface关键字产生类一个完全抽象的类(接口),它根本没有任何具体实现。

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

接口用于建立类于类之间的协议。

接口中的域:默认是publicstaticfinal的。

接口中的方法只能是public的,而且默认就是public的。

9.3 完全解耦

复用代码的第一种方式是客户端程序员遵循该接口来编写它们自己的类。

策略设计模式

更详细的请看设计模式!!!

根据所传递的参数对象的不同而具有不同行为的方法。

这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。

策略就是传递进去的参数对象。

public class Test {
    static void process(Processor p) {
        p.process();
    }

    public static void main(String[] args) {
        Test.process(new Processor1());
        Test.process(new Processor2());
    }
}

interface Processor {
    void process();
}

class Processor1 implements Processor {
    public void process() {
        System.out.println("1");
    }
}

class Processor2 implements Processor {
    public void process() {
        System.out.println("2");
    }
}
适配器设计模式

你经常会无法修改你想使用的类,因为一般你是使用第三方的类库。

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

9.4 Java中的多重继承

Java最多只能继承一个类,但是可以实现多个接口

一个类可以向上转型成任何一个接口。

使用接口的原因:

为了能够向上转型成为多个基类类型。

与抽象类相同,防止客户端程序员创建该类对象。

抽象类OR接口:

如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口。

9.5 通过继承来扩展接口

接口可以继承其他接口

接口可以一次性继承多个其他接口

9.5.1 组合接口时的名字冲突

完全相同的方法不会有问题

interface I1 { void f();}
interface I2 { int f(int i);}
interface I3 { int f();}

class C {
    int f() {
        return 0;
    }
}
// 两个方法重载
class C2 implements I1, I2 {
    public void f() {

    }
    public int f(int i) {
        return 0;
    }
}
// 重载
class C3 extends C implements I2 {
    public int f(int i) {
        return 0;
    }
}
// 相同的方法没问题,同时重写两个方法
class C4 extends C implements I3 {
    public int f() {
        return 4;
    }
}
// 此时是有问题的
class C5 extends C implements I1 {
}
9.6 适配接口

接口最吸引人的原因之一就是允许同一个接口具有多个不同的具体实现。

9.7 接口中的域

因为接口中的域是publicstaticfinal的,所以接口可以用来创建常量组(尽量避免这么做!)。

9.7.1 初始化接口中的域

在接口中定义的域不能是空final,但是可以被非常量表达式初始化。

static代码块不能出现在接口中

9.8 嵌套接口

接口可以嵌套在类或其他接口中。

类内部的接口可以有四种权限控制符。

接口内部的接口可以只能是public的。

当实现某个接口时,不需要实现嵌套在其内部的任何接口。

9.9 接口与工厂

接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方法就是工厂方法

这与直接调用构造器不同,我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。

9.10 总结

优先使用类而不是接口!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72197.html

相关文章

  • Java编程思想笔记13.字符串

    摘要:的构造器经过重载可以接受多种输出目的地,不过最常用的还是和。组号为表示整个表达式,组号表示被第一对括号括起的组,依此类推。有多个重载的构造器,可以接受和对象。 点击进入我的博客 字符串操作是计算机程序设计中最常见的行为 13.1 不可变String String底层是由char[]实现的,是不可变的。看起来会改变String的方法,实际上都是创建了一个新的String对象,任何指向它...

    since1986 评论0 收藏0
  • Java编程思想笔记6.访问权限控制

    摘要:包命名规范使用小写字母。包访问权限为把类聚在一个包中的做法提供了意义和理由。接口访问权限使用关键字,意味着被它修饰的成员对所有类可见。继承访问权限基类的创建者希望某些特定成员,把它的访问权限赋予派生类也不是所有类。 点击进入我的博客 6.1包:库单元 import java.util.ArrayList; import java.util.*; 当编写一个Java源代码文件(编译单...

    wangbjun 评论0 收藏0
  • (CZ深入浅出Java基础)设计模式笔记

    摘要:在设计模式中,所有的设计模式都遵循这一原则。其实就是说在应用程序中,所有的类如果使用或依赖于其他的类,则应该依赖这些其他类的抽象类,而不是这些其他类的具体类。使用设计模式是为了可重用代码让代码更容易被他人理解保证代码可靠性。 这是刘意老师的JAVA基础教程的笔记讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一、面向对象思想设计原则 1.单一职责原则 其实就是开发人员经常说的高...

    李昌杰 评论0 收藏0
  • Java编程思想笔记11.持有对象

    摘要:迭代器通常被成为轻量级对象创建它的代价很小。与迭代器可以用于数组和所有对象,之所以能够工作,是因为继承了接口。 点击进入我的博客 我觉得本章名字改成容器似乎更好理解,持有对象让人感到一头雾水我们需要在任意时刻和任意位置创建任意数量的对象,所以依靠创建命名的引用来持有对象已经满足不了需求。Java可以用数组和其他容器类来(List、Set、Queue、Map)来解决这个问题,不同的容器...

    newtrek 评论0 收藏0
  • Java编程思想笔记14.类型信息

    摘要:接口与类型信息关键字的一种重要目标就是允许程序员隔离构件,进而降低耦合性。如果你编写接口,那么就可以实现这一目标,但是通过类型信息,这种耦合性还是会传播出去接口并非是对解耦的一种无懈可击的保障。 点击进入我的博客 运行时类型信息使得你可以在运行时发现和使用类型信息,主要有两种方式: 传统的RTTI,它假定我们在编译时已经知道了所有的类型; 反射机制,它允许我们在运行时发现和使用类的...

    Hwg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<