JAVA抽象机制

合集下载

abstract在java中用法(一)

abstract在java中用法(一)

abstract在java中用法(一)Abstract在Java中在Java中,abstract是一个关键字,用于定义抽象类和抽象方法。

抽象类是一种特殊的类,不能被实例化,只能用作其他类的基类。

抽象方法是一种没有具体实现的方法,只有方法声明,没有方法体。

下面将详细讲解abstract在Java中的用法。

抽象类抽象类是一种用abstract关键字修饰的类。

它不能被实例化,只能作为父类被继承。

抽象类的主要作用是定义子类需要实现的一组方法,子类必须实现这些方法才能被实例化。

定义抽象类的语法如下:abstract class AbstractClass {// 抽象方法public abstract void abstractMethod();// 普通方法public void normalMethod() {// 方法实现}}抽象类可以包含抽象方法和普通方法。

抽象方法用abstract关键字修饰,没有方法体;普通方法有方法体。

抽象类可以包含普通成员变量和静态成员变量,也可以包含普通方法和静态方法。

但是不能创建抽象类的实例。

抽象方法抽象方法是一种没有具体实现的方法,只有方法声明。

抽象方法用abstract关键字修饰,没有方法体。

抽象方法必须在抽象类中声明,子类必须实现这些抽象方法才能被实例化。

定义抽象方法的语法如下:abstract void abstractMethod();抽象方法也可以包含参数和返回值,用于定义子类必须实现的方法签名。

子类继承抽象类后,必须实现抽象方法,否则子类也必须声明为抽象类。

继承抽象类子类继承抽象类后,必须实现抽象类中的所有抽象方法才能被实例化。

子类可以通过覆盖抽象方法来实现具体的功能。

如果子类不想实现某个抽象方法,那么子类也必须声明为抽象类。

继承抽象类的语法如下:class ConcreteClass extends AbstractClass {// 实现抽象方法public void abstractMethod() {// 方法实现}// 覆盖普通方法public void normalMethod() {// 方法实现}}注意,如果一个类继承了抽象类,但没有实现抽象方法,则该类必须声明为抽象类。

java抽象方法

java抽象方法

java抽象方法Java中的抽象方法Java是一种面向对象的编程语言,它提供了许多特性和机制,帮助开发者构建高效且可靠的应用程序。

其中之一就是抽象方法。

抽象方法是一种特殊类型的方法,它没有具体的实现。

它只有方法的签名,没有方法体。

在Java中,我们使用关键字"abstract"来定义抽象方法。

抽象方法必须在抽象类或者接口中声明。

在抽象类中,我们可以包含抽象方法和具体方法。

一个类如果包含了一个或多个抽象方法,它就必须被声明为抽象类。

抽象类不能被实例化,只能作为父类来使用。

子类继承抽象类时,必须实现所有抽象方法,除非子类也是抽象类。

抽象方法的作用是为了规范子类的行为。

一个抽象方法定义了一个接口,指定子类必须实现的方法。

它强制子类提供特定的功能,从而保证了代码的可靠性和可维护性。

下面的例子演示了如何定义和使用抽象方法。

我们假设有一个动物类,它是一个抽象类,有一个抽象方法叫做"makeSound":```javaabstract class Animal {public abstract void makeSound();}class Dog extends Animal {public void makeSound() {System.out.println("汪汪!");}}class Cat extends Animal {public void makeSound() {System.out.println("喵喵!");}}public class Main {public static void main(String[] args) {Animal dog = new Dog();dog.makeSound();Animal cat = new Cat();cat.makeSound();}}```在上面的例子中,我们定义了一个抽象类Animal,并声明了一个抽象方法makeSound。

Java抽象类、抽象方法详解

Java抽象类、抽象方法详解

Java抽象类、抽象⽅法详解⽬录1. 概述类⽤于描述现实⽣活中⼀类事物。

类中有属性、⽅法等成员。

⽗类中的⽅法,被它的⼦类们重写,⼦类各⾃的实现都不尽相同。

那么⽗类的⽅法声明和⽅法主体,只有声明还有意义,⽽⽅法主体则没有存在的意义了。

某种情况下,⽗类只能知道⼦类应该具备⼀个怎样的⽅法,但是不能够明确知道如何实现该⽅法。

只能在⼦类中才能确定如何去实现⽅法体。

例如:所有⼏何图形都应该具备⼀个计算⾯积的⽅法。

但是不同的⼏何图形计算⾯积的⽅式不同。

我们把没有⽅法主体的⽅法称为抽象⽅法。

Java语法规定,包含抽象⽅法的类就是抽象类。

2. 抽象⽅法抽象⽅法:只有⽅法的声明,没有⽅法体,以分号 ; 结尾,使⽤abstract关键字修饰定义格式:修饰符 abstract 返回值类型⽅法名(参数列表);代码举例:public abstract void run();抽象⽅法不能⽤private、final、static、native修饰3. 抽象类抽象类:包含抽象⽅法的类。

如果⼀个类包含抽象⽅法,那么该类必须是抽象类,使⽤abstract关键字修饰定义格式:public abstract class 类名 {//抽象类中可以包含变量、常量,抽象⽅法,⾮抽象⽅法}代码举例:public abstract class Person {public abstract void work();}抽象类的使⽤抽象类不能实例化,不能直接创建对象。

抽象类是⽤来被继承的,继承抽象类的⼦类必须重写⽗类所有的抽象⽅法。

否则,该⼦类也必须声明为抽象类,使⽤abstract关键字修饰抽象类也是类,因此原来类中可以有的成员,抽象类都可以有,那么抽象类不能直接创建对象,为什么还有构造器呢?供⼦类调⽤,⼦类创建对象时,需要为从⽗类继承的属性初始化。

抽象类不能使⽤final修饰public class Teacher extends Person {public void work() {System.out.println("讲课");}}public class AbstractClassTest {public static void main(String[] args) {// 创建⼦类对象Teacher t = new Teacher();// 调⽤run⽅法t.work();}}输出结果:讲课此时的⽅法重写,是⼦类对⽗类抽象⽅法的完成实现,我们将这种⽅法重写的操作,叫做实现⽅法。

Java中抽象类(abstract class)和接口(interface)的使用

Java中抽象类(abstract class)和接口(interface)的使用

【 要 】 bt cc s 和 i e ae J a 摘 :asatl s n rc 是 a 语言 中对 于 象类定义 的两种机 制 。它们之 间在 对于抽象 类定 义的 支持 方 r a t f v 抽 面具有很 大的相似性 , 实际上 , 两者之 阃还 是有 区别的 , 于它们的选择 可 以反 映 出对 于问题领域本 质的理解 、 于设计 意 对 对 图的理解是否正确、 合 1 07 期
福 建 电 脑
jv aa中抽 象类 (bt c c s as at l s r a
吴小青
(元 锡 南 洋职 业技 术 学 院 信 息 系 江 苏 无锡
E( tr c) lnef e i a
248 10 1)
【 关键词】 : gg( satl s 接口( t a )面向对象 a t cc s) b r a 、 ie c 、 nr e f
子类只能有一个父类 , 但是 , 一个类却 可以实现多个接 口( t . ie nr fc ) ae 。接 口实际上解决 了 Jv 不支持多重继承 的问题 . aa 可以通 过实现多个接 口达到与多重继承相同的功能 第 二 。 as at l s的定 义 中 , 以有 自 己的 数 据 成 员 和 在 bt c a r cs 可 方 法。 方法 可以是抽 象的也可 以是非抽象的 . 方法也可以有默认 行为。 但是 在 itr c ne ae的定 义中 , f 变量必须是 f a s t i l ti n a c的. 方法 个 图形编辑 软件的开发 , 就会 发现 问题 领域存在着 点 、 直线 、 也不能拥有 默认行 为。在抽象类 中不能定义默认行为可 能会 造 圆、 三角形这样一些具体概念 , 它们 是互不相 同的 , 但是它们 又 成 维护上 的麻烦 。因为如果 后来想修改 类 ( 一般 通过 as at bt c r 都 属 于 图形 形 状这 样 一 个 概念 形 状 这 个 概 念 在 问题 领域 是 不 ca8 者 it ae来 表 示 ) ls 或 ne c f r 以适 应 新 的 情 况 ( 如 , 加 新 的 方 比 添 存在的 . 通俗 的说我们不能够像 想象 ” 一 样想象 ” 圆” 形状” 怎 法 或 者 给 已用 的 方 法 中 添加 新 的 参 数 ) , 会 非 常 的 麻 烦 , 是 时 就 可 样 一 个 图 形 , 就 是 一个 抽 象 概 念 。 是 因 为 抽 象 的概 念在 问题 能 要 花 费 很 多 的时 间 。但 是 如果 界 面是 通 过 as at l s 实 它 正 btc cs 来 r a 领 域 没 有 对应 的具 体 概念 .所 以 用 以表 征 抽 象 概 念 的抽 象 类 是 现 的 .那 么 可 能 就 只 需 要 修 改 定 义 在 a 8 at l s 的 默 认 行 bt c a 中 r cs 不 能够实例化具体对象的。 为就 可 以 了 。 个 抽 象 类 可 以定 义 一 个 统 一 的 编 程 接 口 .使 其 子 类 表 现 从设计理念层面看 a s at l s和 i e ae。上面主要从 b t c a r c s n rc tf 出共 同的状态 和行为 。 但各 自的细节是不 同的。 子类共有的行为 语 法 定 义 和 编 程 的 角 度 论 述 了 a8 at as和 it fc bt c d 8 r ne ae的 区 r 由抽 象 类 中 的抽 象 方 法 来 约束 .而 子 类 行 为 的具 体 细节 则 通过 别 。 这些层面 的区别是 比较低 层次的、 非本质 的。以下将从 另一 抽象方法的覆盖来实现。 由于模块依赖于 一个 固定 的抽象体 . 因 个 层 面 : s at l s it ae所 反 映 出 的设 计 理 念 。来 分 析 b r s a t c ca 和 ne c f r 此它可 以是不允许修 改的 ; 同时 , 通过 从这个抽象 类派生 , 也可 下 二者 的 区别 。从 这 个 层 面 进 行 分 析 才 能 理 解 二 者 概 念 的 本 扩 展 此 模 块 的 行 为 功 能 。 熟悉 O P的 读 者 一 定 知 道 . 了 能够 质 所 在 。 C 为 上 文 中 已经 提 到 过 . s rt l s在 jv b a a a tc cs aa语 言 中 体 现 了 一 实现面向对象设计的一个最核心 的原 则 O PO e — l e r . C (p n Co dPi s n c l)抽 象 类 是其 中 的关 键 所 在 i e. p 种继 承关 系 , 想 使 得 继 承 荧 系 合理 。 类 和 派 生 类 之 间 必须 存 要 父

JAVA抽象类

JAVA抽象类
abstract 关键字修饰的方法必须被其子类重写才有意义,否则这个方法半永远不会有方 法体,因此 abstract 方法不能定义为 private 访问权限,即 private 和 abstract 不能同时使用。
抽象类的作用
从前面的示例程序可以看出,抽象类不能创建实例,它只能当成父类来被继承,从语义的角 度来看,抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相 同特征的类中抽象的出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类设计 的随意性。
return a+b+c; }
//重写 Shape 类的返回形状的抽象方法 public String getType() {
return "三角形";
} }
上面的 Triangle 类继承了 Shape 抽象类,并实现了 Shape 类中两个抽象方法,是一个普通类, 因此可以创建 Triangle 类的实例,可以让一个 Shape 类型的引用变量指向 Triangle 对象
abstract 不能用于修饰属性,不能用于修饰局部变量,即没有抽象变量,没有抽象属性等说 法;abstract 也不能用于修饰构造器,没有抽象构造器,抽象类里定义的构造器只能是普通构
造器。
另外我们要记住,当使用 static 来修饰一个方法时,表明这个方法属于当前类,即 该方法可以通过类来调用,如果该方法被定义成抽象方法,则将导致通过该类来调用该方法 时出现错误(调用了一个没有方法体的方法肯定会引起错误),因此 static abstract 不能同时 修饰某个方法,即没有所谓的类抽象方法。
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类 的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。

java abstract类命名

java abstract类命名

java abstract类命名摘要:1.Java抽象类概述2.抽象类的特点3.抽象类与接口的区别4.抽象类的应用案例5.命名规范与建议正文:Java抽象类是一种不能实例化的类,它包含一个或多个抽象方法。

抽象方法是没有方法体的方法,需要子类提供具体实现。

抽象类的主要目的是规定子类的接口,实现代码的复用。

抽象类的特点主要有以下几点:1.抽象类不能被实例化。

2.抽象类至少包含一个抽象方法。

3.抽象类可以包含普通方法和字段。

4.抽象类不能包含构造方法。

5.抽象类不能被继承,但可以被实现。

抽象类与接口的区别主要体现在以下几个方面:1.抽象类可以包含普通方法和字段,而接口只能包含方法定义。

2.抽象类中的方法可以有不同的访问权限,而接口中的方法都是public 的。

3.抽象类可以有构造方法,而接口不能。

4.抽象类中的方法可以有默认实现,而接口中的方法没有默认实现。

5.实现类可以同时实现多个接口,但只能继承一个抽象类。

抽象类的应用案例包括:1.模板方法模式:通过定义一个抽象类,将算法的结构和共享功能定义在该抽象类中,而将具体的实现留给子类。

2.工厂方法模式:通过定义一个抽象类,声明创建对象的方法,具体创建过程由子类决定。

3.适配器模式:通过定义一个抽象类,将原本接口不兼容的类转换成可以相互通信的类型。

在命名方面,抽象类通常以"Abstract"作为前缀,以表明它是一个抽象类。

此外,建议遵循驼峰命名法,将抽象方法命名为"abstractMethod",以与其他方法区分开来。

总之,Java抽象类是一种非常有用的编程概念,它可以帮助我们更好地实现代码复用和提高代码的可维护性。

天地伟业java面试题

天地伟业java面试题

天地伟业java面试题1. 什么是Java虚拟机(JVM)?Java虚拟机(JVM)是Java程序的运行环境,它是一个虚拟的计算机,它可以在不同的操作系统上运行Java程序。

JVM负责将Java程序编译后的字节码解释成机器码,并执行程序。

2. 什么是Java的多态性?Java的多态性是指同一个方法可以在不同的对象上产生不同的行为。

这是通过继承和接口实现的。

多态性可以提高代码的可重用性和可扩展性。

3. 什么是Java的封装性?Java的封装性是指将数据和方法封装在一个类中,只对外暴露必要的接口,隐藏实现细节。

这可以提高代码的安全性和可维护性。

4. 什么是Java的继承性?Java的继承性是指一个类可以继承另一个类的属性和方法。

这可以提高代码的可重用性和可扩展性。

5. 什么是Java的抽象类?Java的抽象类是一种不能被实例化的类,它只能被继承。

抽象类可以包含抽象方法和非抽象方法,抽象方法必须在子类中被实现。

6. 什么是Java的接口?Java的接口是一种抽象类型,它只包含方法的声明,没有方法的实现。

接口可以被类实现,一个类可以实现多个接口。

接口可以提高代码的可重用性和可扩展性。

7. 什么是Java的异常?Java的异常是指程序运行时发生的错误或异常情况。

Java提供了一些异常类,可以用来处理不同类型的异常。

异常处理可以提高程序的健壮性和可靠性。

8. 什么是Java的线程?Java的线程是指程序中的一条执行路径,它可以独立运行,可以与其他线程并发执行。

Java提供了多线程编程的支持,可以提高程序的并发性和性能。

9. 什么是Java的反射?Java的反射是指在程序运行时动态获取类的信息和调用类的方法。

Java提供了反射机制,可以在运行时获取类的信息,创建对象,调用方法等。

反射可以提高程序的灵活性和可扩展性。

10. 什么是Java的注解?Java的注解是一种元数据,它可以用来描述类、方法、变量等元素的属性和行为。

java代码规则标准

java代码规则标准

java代码规则标准Java代码规则标准可以参考以下内容:- 类命名:- 抽象类:适用的设计模式为模板模式。

抽象是自下往上的设计。

由具体实现推断出抽象方法。

建议以`Abstract`开头。

- 枚举类:枚举是由JVM来保证的单例。

可以用来做单例类。

枚举类常用来做值判断,不建议每次进行循环判断得到实例。

建议由内部维护一个`map`类型,当做`cache`。

此方法建议放在`static`静态代码块中实现。

- 工具类:工具类常为无状态对象,无状态对象都是线程安全对象,建议使用`final`修饰。

工具类中避免出现业务属性,如果出现业务属性,抽象出领域层。

- 异常类:建议保持异常链。

- 接口实现类:众所周知。

- 设计模式相关类:- 处理特定功能的:其主要的目的是代码可重复使用。

- 测试类:- 领域模型载体:- 方法命名:- 布尔判断方法:- 检查的方法:- 按需求才执行的方法:- 异步相关方法:- 回调方法:- 操作对象生命周期的方法:- 与集合操作相关的方法:- 数据增删改查相关的方法:- 成对出现的动词:- 获取必须的参数:- 获取数据并对数据进行某种处理:- 方法编程建议:- 方法复杂度:凡事逻辑判断语句均为复杂度。

当一个方法中出现了大于等于10个复杂度,建议根据方法实现进行业务抽离。

在编写Java代码时,需要遵循一定的规则和标准,以提高代码的可读性、可维护性和可扩展性。

你可以根据项目的具体需求和团队的约定来选择合适的规范。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 抽象类和接口的区别
所谓抽象类是用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象;所谓接口,
相当于电源插座,可插入构件相当于电器。

可插入构件的关键在于存在一个公
用的接口,以及每个构件都实现了这个接口。

接口是实现构件的可插入性的关键。

1.1. 从语法层区别抽象类和接口
从语法层来讲,Java语言对于抽象类和接口给出了不同的定义方式,下面
以定义一个名为Demo的抽象类为例来说明这种不同。

Demo抽象类的定义方式如下:
abstract class Demo {
abstract void method1();
abstract void method2();

}
Demo的接口定义方式如下:
interface Demo {
void method1();
void method2();

}
在抽象类的定义中,Demo可以有自己的数据成员,也可以有非abstract
的成员方法,而在接口的定义中,Demo只能够有static final数据成员,所有
的成员方法都是abstract的。

从某种意义上说,接口是一种特殊形式的抽象类。

从编程的角度来看,首先,抽象类和接口的继承规则不同,抽象只允许单
继承,而一个类却可以实现多个接口。

接口对于多重继承的支持方面的一种折
中考虑;其次,在抽象类的定义中,可以赋予方法的默认行为,而在接口的定
义中,方法不能拥有默认行为,必须使用委托,从某种意义上来说,接口比抽
象类更为抽象化。

1.2. 从设计层上理解抽象类和接口
上面主要从语法层的角度论述了抽象类和接口的区别,这些层面的区别是
比较低层次的、非本质的。

本小节将从这个设计层进行分析理解二者概念的本质。

抽象类在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"Is-A"关系,即父类和子类在概念本质上应该是相同的。

对于接口来说则不然,接口并不要求实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已。

考虑这样一个例子,假设在有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通
过抽象类或者接口来定义一个表示该抽象概念的类型,定义方式分别如下所示:Door抽象类的定义方式如下:
abstract class Door {
abstract void open();
abstract void close();
}
Door的接口定义方式如下:
interface Door {
void open();
void close();
}
其他具体的Door类型可以extends使用抽象类方式定义的Door或者implements使用接口方式定义的Door。

看起来好像使用抽象类和接口没有大
的区别。

如果现在要求Door还要具有报警的功能。

下面将罗列出可能的解决
方案,并从设计层对方案进行分析。

解决方案一:
简单的在Door的定义中增加一个alarm方法,如下:abstract class Door {
abstract void open();
abstract void close();
abstract void alarm();
}
或者
interface Door {
void open();
void close();
void alarm();
}
那么具有报警功能的AlarmDoor的定义方式如下:class AlarmDoor extends Door {
void open(){…}
void close(){…}
void alarm(){…}
}
或者
class AlarmDoor implements Door{
void open(){…}
void close(){…}
void alarm(){…}
}
这种方法违反了接口隔离原则,在Door的定义中把Door概念本身固有的
行为方法和另外一个概念“报警器”的行为方法混在了一起。

这样引起的一个问
题是那些仅仅依赖于Door这个概念的模块会因为“报警器”这个概念的改变(比如:修改alarm方法的参数)而改变,反之依然。

解决方案二:
既然open、close和alarm属于两个不同的概念,根据接口隔离原则应该
把它们分别定义在代表这两个概念的抽象类中。

定义方式有:这两个概念都使
用抽象类方式定义;两个概念都使用接口方式定义;一个概念使用抽象类方式
定义,另一个概念使用接口方式定义。

显然,由于Java语言不支持多重继承,所以两个概念都使用抽象类方式定义是不可行的。

后面两种方式都是可行的,但是对于它们的选择却反映出对于
问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。

如果两个概念都使用接口方式来定义,那么就反映出两个问题:第一,我
们可能没有理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是报
警器?第二,如果我们对于问题领域的理解没有问题,比如:我们通过对于问
题领域的分析发现AlarmDoor在概念本质上和Door是一致的,那么我们在实
现时就没有能够正确的揭示我们的设计意图,因为在这两个概念的定义上(均
使用接口方式定义)反映不出上述含义。

如果我们对于问题领域的理解是:AlarmDoor在概念本质上是Door,同时
它有具有报警的功能。

我们该如何来设计、实现来明确的反映出我们的意思呢?前面已经说过,抽象类在Java语言中表示一种继承关系,而继承关系在本质上是"Is-A"关系。

所以对于Door这个概念,我们应该使用抽象类方式来定义。

另外,AlarmDoor又具有报警功能,说明它又能够完成报警概念中定义的行为,
所以报警概念可以通过接口方式定义。

如下所示:
abstract class Door{
abstract void open();
abstract void close();
}
interface Alarm{
void alarm();
}
class AlarmDoor extends Door implements Alarm{
void op en(){…}
void close(){…}
void alarm(){…}
}
这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。

其实抽象类表示的是"Is-A"关系,interface表示的是"Has-A"关系,在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。

2. 抽象机制的重要性
抽象机制是面向对象的可复用设计的必要条件。

面向对象的可复用设计的基石是开闭原则,也即一个软件实体应该对扩展开放,对修改关闭。

满足开闭原则的关键就在于抽象化。

在Java这样的面向对象的编程语言里,可以给系统定义出一个一劳永逸,不在更改的抽象设计,此设计允许有无穷无尽的行为在实现层被实现。

在Java语言里,可以给出一个或者多个抽象类或接口,规定出所有的可能的扩展,因此在任何扩展的情况下都不会改变。

这就使得系统的抽象层不需修改,从而满足了开闭原则的第二条:对修改关闭。

同时,由于从抽象层导出一个或者多个新的具体类可以改变系统的行为,因此系统对扩展是开放的,这就满足了开闭原则的第一条:对扩展开放。

所有的软件系统都有一个共同的性质,即对它们的需求都会随时间的推移而发生变化,在软件系统面临新的需求时,系统的设计必须是稳定的。

满足开闭原则的设计可以给软件系统带来一定适应性和灵活性,使变化中的软件系统具有一定的稳定性和延续性。

3. 结论
抽象类和接口是Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。

但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系。

只有正确理解面向对象的设计原则并灵活使用抽象类和接口,才能设计出易用的系统。

相关文档
最新文档