接口中的方法自动是public abstract 的.
* 接口优先于抽象类:
java提供了两种机制可以用来定义允许多个实现的类型:接口和抽象类。
最明显的区别在于,抽象类允许包含某些方法的实现,接口则不允许。
更重要的区别在于,为了实现抽象类定义的类型,类必须成为抽象类的子类。
因为java只允许单继承,所以抽象类受到了极大的限制。
因为java允许实现多个接口,现有的类很容易被更新以实现新的接口。
接口是定义混合类型的理想选择,接口允许我们构造非层次结构的类型框架。
通过包装类(Decorator模式),接口使得安全地增强现有类的功能成为可能。
通过对导出的每个重要接口提供一个抽象的骨架实现类,把接口和抽象类的优点结合起来。骨架实现
被称为AbstractInterface。
Collections Framework为每个重要的集合接口都提供了一个骨架实现,包括AbstractCollection、
AbstractSet、AbstractList、AbstractMap。
***************************************************************
* 接口只用于定义类型:
当类实现接口时,接口就充当可以引用这个类的实例的类型。
常量接口模式是对接口的不良使用,这种接口没有包含任何方法,只包含静态的final域,每个final域都
导出一个常量。
要导出常量,可以有两种合理的选择方案:
(1)如果这些常量与某个现有类或者接口紧密相关,应该把这些常量添加到这个类或者接口中。
(2)如果这些常量最好被看作枚举类型的成员,就应该使用枚举类型来导出这些常量。
***************************************************************
* 类层次优先于标签类:
标签类是指使用类成员变量来表示对象的类别,通常应该考虑子类型化(subtyping)。
当想要编写一个包含显式标签field的类时,应当考虑一下,这个标签是否可以被取消,这个类是否可以
用类层次来代替。
当遇到一个包含标签field的现有类时,就要考虑将他重构到一个类层次结构中去。
***************************************************************
* 用函数对象表示策略:
如果一个类仅仅导出一个方法,该方法执行其他对象上的操作(这些对象被显式传递给方法),它的
实例实际上等同于指向该方法的指针,这样的实例被称为函数对象。
具体的策略类往往使用匿名类声明,但是以这种方式使用匿名类,将会在每次执行调用的时候都创建
一个新的实例。
函数对象的主要用途就是实现策略模式(strategy)。
当一个具体策略设计用来重复使用的时候,它的类通常就要被实现为私有的静态成员类,并通过
public static final field被导出,其类型为策略接口。
***************************************************************
* 优先考虑静态成员类:
嵌套类(nested class)是指被定义在另一个类内部的类。嵌套类存在的目的应该只是为它的外围类
(enclosing class)提供服务。
嵌套类有四种:静态成员类、非静态成员类、匿名类、局部类(local)。除了静态成员类,其他三种被
称为内部类(inner class)。
* 静态成员类:最好把它看作一个普通的类,只是碰巧声明在另一个类内部,它可以访问外围类的所有
成员,包括声明为私有的成员。
静态成员类和外围类的其他静态成员一样,也遵守同样的访问规则,如果被声明为private的,它就只能
在外围类的内部才可以被访问。
如果声明的成员类不要求访问外围实例,应该使用static使它成为静态成员类以提高性能和节省空间。
* 非静态成员类:它的每个实例都隐含着与外围类的实例相关联。在非静态成员类实例的方法内部,
可以调用外围实例上的方法,或者利用修饰过的this构造或者外围实例的引用。
在没有外围类实例的情况下,想要创建非静态成员类的实例是不可能的。当非静态成员类的实例被
创建的时候,它与外围实例的关联关系也随之建立起来,
这种关联关系以后不能被修改,每个实例都将包含一个额外的指向外围对象的引用。使用 Outer.this.field
访问外围类的成员。
* 匿名类:匿名类没有名字,它不是外围类的一个成员,并不与其他成员一起被声明,而是在使用的同时
被声明和实例化。它可以出现在代码中任何允许存在表达式的地方。
无法声明一个匿名类来实现多个接口,或者同时扩展类和实现接口。
匿名类的常见用法是动态地创建函数对象。另一种用法是创建过程对象(Runnable、Thread)。
* 普通(非内部)类不可设为private 或protected——只允许public 或者“友好的”。
相关推荐
在这个例子中,`Eat()`和`Speak()`是接口的成员,没有具体实现,它们需要在实现该接口的类中提供实现。 ### 接口实现 类可以通过`implements`关键字来实现一个或多个接口,并提供接口中所有成员的具体实现。例如,...
在Java编程语言中,类和接口是面向对象编程的基础元素,它们构成了程序设计的核心结构。本文将详细探讨这两个概念,以及如何在Java小程序中有效利用它们。 首先,我们来看类。类是Java中的蓝图,它定义了具有相同...
接口、类和结构都可以从多个接口继承。 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 接口和类都可以包含事件、索引器、属性。 接口只能定义方法。 1. 类 类的分类有:抽象类(abstract)...
超全面javaweb教程28天第9天_4_Servlet之接口和类的介绍,以及实现Servlet接口
Java接口和抽象类是两种重要的面向对象编程概念,它们在软件设计中扮演着关键角色,主要用来实现多态性和代码的可扩展性。虽然两者都用于定义类的行为,但它们之间存在着显著的区别。 首先,接口是一种完全抽象的...
3. **解耦合**:接口使得实现类和调用者之间解耦,两者仅通过接口进行交互,降低了系统的复杂性。 4. **模块化设计**:接口可以作为模块之间的边界,定义模块提供的服务,使模块间的依赖更加清晰。 5. **事件处理*...
本篇将深入探讨泛型接口和泛型类接口,以及如何在实际项目中应用它们。 首先,我们来理解泛型接口。在TypeScript中,接口(Interface)用于定义对象的结构,而泛型接口则是具有一个或多个类型参数的接口。这样,...
通过这些理解,我们可以更好地利用抽象类和接口来设计灵活且可扩展的软件架构。在选择使用抽象类还是接口时,应根据项目需求和设计原则来权衡。例如,如果需要共享部分实现并有继承关系,可以选择抽象类;如果需要多...
在描述中提到的代码中,可能包括了以下接口和类: 1. `Duck`接口:这个接口定义了鸭子的基本行为,比如`quack()`(叫声)和`fly()`(飞行)等方法。 2. 不同的鸭子实现类:例如`MallardDuck`、` RubberDuck`等,...
### AS3 接口类的用法和好处详解 #### 一、引言 本文将深入探讨Adobe Flash Platform中的ActionScript 3 (AS3) 如何利用接口(interface)来优化程序设计,特别是在需要多态性和扩展性的场景下。首先,我们将通过一个...
Java定义泛型接口和类的方法实例分析 Java定义泛型接口和类的方法实例分析是Java中的一个重要概念,它允许在定义类、接口时指定类型形参,这个类型形参在将在声明变量、创建对象时确定。泛型的引入提高了Java程序的...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
* 提高了代码的可维护性:集合框架提供了丰富的接口和类,易于维护和更新。 Java 集合框架的应用场景: * 数据存储:使用集合框架可以存储大量数据,并提供了丰富的操作方法。 * 数据处理:使用集合框架可以对数据...
在.NET开发中,接口和类是核心概念之一,它们在代码组织和功能实现中扮演着重要的角色。尽管接口和类在某些方面有相似之处,但它们之间存在着本质的区别,并各自拥有优势和局限性。 首先,让我们来探讨接口和抽象类...
【JAVA 教学 PPt(接口,类和对象尤其详尽)】 在Java编程语言中,接口、类和对象是核心概念,对于理解和构建复杂的软件系统至关重要。让我们深入探讨这些主题。 1. 接口(Interface): Java中的接口是一种完全...
Java中的类、抽象类和接口的区别和联系
例如,`class Tyke implements OnEarth, NearAttack`表示Tyke类实现了OnEarth和NearAttack接口,从而继承了它们的方法和属性。类必须提供接口中所有未被其他接口覆盖的抽象方法的具体实现。 3. **接口的多重继承**...
对于开发者来说,它是快速查找特定功能、理解类和接口工作原理的宝贵资源。 总的来说,理解和熟练使用Java API接口和类是成为Java开发者的必备技能。这份“Java API接口详述”资源结合详细的JDK API文档,可以帮助...