|
|
《JavaTM程序设计语言基
础》第 2 部分 也许您已听到过大量有关面向对象的程序设计的话题。而且,如果 JavaTM 程序设计语言是您使用的第一种面向对象的程序设计语言,那么您很可能迫切希望 全面了解这种语言。 在实际操作了 《Java
程序设计语言基 础》第1部分1 和 第2部分
中的示例程序后,您 应该对类、对象、实例和继承性以及访问等级 这就是有关 Java 程序设计语言的重要问题之一。它本来就是面向对象的。 为了帮助您对面向对象的程序设计及其优点有更深入的理解,本课将简洁地介 绍一些与本教程中某些示例程序相关的、面向对象的概念和术语。 面向对象程序设计的定义面向对象的程序设计是基于类以及界定分明的并能互操作的对象的层次结构的 一种程序设计方法。 类类是定义数据和处理该数据的方法的一种结构。当您在使用 Java 语言编写程 序时,所有程序数据都包含在一个类中;该类可以是您自己编写的类,也可以是 从 Java 平台 API 库中调用的类。 第1部分第一课中简单程序的 class ExampleProgram {
public static void main(String[] args){
System.out.println("I'm a simple Program");
}
}
Java 平台 API 库中的类定义了一套共享通用结构和动作的对象。示例程序中 所使用的 示例中是看不到 若想访问 class ExampleProgram {
public static void main(String[] args){
String text = new String("I'm a simple Program ");
System.out.println(text);
String text2 = text.concat(
"that uses classes and objects");
System.out.println(text2);
}
}
以上方法的输出如下:
I'm a simple Program
I'm a simple Program that uses classes and objects
对象实例是类的可执行备份。实例又名对象。任何时候内存中都可以有某个类的多 个对象。 前述示例为合并运算、
而且,由于 除
明确界定及互操作类定义必须允许对象能在执行期间互操作。在前一节中,您已看到 本节将对示例程序加以改动,使之能在用户界面的 把文本信息放置在标签中并显示在用户界面上的程序代码使用了大量可互操作的类。每个类都有各自的功能和作用(如下文所述),而且在适当的位置定义了可与其他类的对象互操作的类。
import javax.swing.*;
import java.awt.Color;
import java.awt.event.*;
class ExampleProgram extends JFrame {
public ExampleProgram(){
String text = new String("I'm a simple Program ");
String text2 = text.concat(
"that uses classes and objects");
JLabel label = new JLabel(text2);
JPanel panel = new JPanel();
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add(label);
}
public static void main(String[] args){
ExampleProgram frame = new ExampleProgram();
frame.setTitle("Fruit $1.25 Each");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
}
}
继承性使对象互操作的一个面向对象的概念就是继承性。继承性定义了面向对象的语 言中各种类之间的相互关系。在
Java 程序设计语言中,所有的类都来自 下图表示出了上文用户界面示例程序中各种类从 当您在向下移动层次结构时,每一个类都把它们自己特定的域和方法组添加到 它们从一个或多个超类继承下来的域和方法组中。 多态性使对象互操作的另一种方法是,定义把其他对象当作自己的参数的方法。当对 象被一个通用的超类统一在一起时,这些对象就能够更加密切地互操作而且效率更 高。Java 程序设计语言中的所有类都有继承关系。 例如,如果定义了用 第2部分、第5课:集合
中就有一个多态性的示 例,其中的集合对象可包含来自 String custID = "munchkin";
Integer creditCard = new Integer(25);
Set s = new HashSet();
s.add(custID);
s.add(creditCard);
数据访问级别类互操作的再一种方法是通过访问级别进行控制。类及其域和方法都有访问级 别,访问级别用于指明它们在程序运行期间对于其它对象的可使用等级。在需要 对象之间的互操作时,有时需要明确地控制访问权限,而指定访问级别就是实现 这种控制的方法。如果没有指明访问级别,系统就会采用默认访问级别。 类缺省状态下,类只能被同一程序包中其他类的实例使用。类可以定义为 以下代码对 applet 类进行定义,使之具有 public class DbaAppl extends Applet
implements ActionListener {
如果没有定义为 public 访问级别(如下所述),其访问级别就默
认为 package。在试图利用 appletviewer
工具解释访问等级为 package 的类时,将会出现错误。访问级别为
protected 或 private
时,情况也是如此。
class DbaAppl extends Applet
implements ActionListener {
在第2部分、第6课:全球化中,服务器类也被定义为公
有类,以便客户类能够访问它们。
域和方法域和方法可以声明为
private Connection c;
自定义类只要您使用了 Java API 库中的类,以上概念就存在于您的脑海中了。这些类 都来自给予它们继承关系的
例如,您不会发现任何以 但是,当编写自己的类时情况会怎样呢?您又如何保证您所编写的类具有明确 的界定、能互操作并能使用继承性呢?方法之一是,明确您需要程序实现的功能并 把它们分别放置在不同的模块中。每一个功能模块都由自己的类和类群定义。 界定明确和互操作的类分析第2部分、第5课:集合 中RMIClient2 ,您会发现它实现了以下功能:提取数据、显示数据、存放客户ID、打印客户ID 并重置显示区。 提取数据、显示数据和重置显示区都是密切相关的,并可以轻易地形成功能模 块。但是,在一个需要处理更多数据的较大程序中,就需要把客户 ID 的存放和 打印功能进行扩展,使之能够存放和打印范围更广的数据。此时,就需要一个单 独的类来实现数据存放,并需要另一个类来打印各种形式的数据。 例如,您可以用一个类来定义如何存放客户 ID 和跟踪本年度内苹果、桃和梨 的销售量。您也可以利用另一个类来定义报告打印。可读取已保存数据来按月、 按客户或按指定季度输出苹果、桃和梨的销售信息。 通过划分功能单元使应用程序编码模块化后,应用程序就更容易实现源代码的 更新和维护。当您改变了某个类时,只要您没有改变其公有接口的任何部分,您就 不必对这个类进行重新编译。 继承性确定您的程序所需要的类,就是把功能分割成模块,而使程序代码更高效,而 更易于维护则是找出可以使用继承性的通用功能。如果需要编写一个具有功能类 似于 Java API 库中的类的类,就可以对 API 库中的这个类加以扩展并借用其方 法,而无需重新编写所有代码。 第2部分、第5课:集合
中的RMIClient2
类是把 与此类似,如果您想在现有类中添加自定义动作,您就可以对现有类进行扩展 并添加您所需要的功能。例如,您可以创建一个外观不同的自定义
访问级别声明类、域和方法时,应始终注意它们的访问级别。同时应考虑哪些对象真正 需要访问数据并需要使用程序包和访问级别,来避免系统中运行的所有其它对象 破坏您的应用程序数据。 大多数面向对象的应用程序的类对象通过把域定义为私有来禁止其它对象直接 访问这些域。而且,这些面向对象的应用程序还会在需要时把它们的方法定义为 受保护、公有型或程序包类的方法,并仅允许其它对象通过调用相应的方法来操 作它们的私有数据。这样,您就可以通过修改域定义和对应的方法实现代码来更 新自己的类,而不需要修改访问该数据的其它对象,因为它们与数据(方法符号) 的接口并没有改变。 程序的改进本课涉及的程序改进包括设置合适的访问级别并把程序组织到功能单元中。 设置访问级别最好的办法始终是尽可能多地限制访问。请回顾 第2部
分、第7课:程序包和JAR 文件 中的内容:服务器类必须声明为 同时,并没有为其它类和域指定访问级别,所以它们的访问级别为默认的 最好回顾一下前文中有关客户类的内容,并为类、域和方法设置一个访问级别, 以使它们不致被其它对象访问。 客户程序RMIClient1.java
和 RMIClient2.java
的参考答案见 RMIClient1.java 和 RMIClient2.java。您能解释 把程序代码组织到功能单元中把程序代码分割成功能单元的方法之一是,把用户接口程序放置到一个类中而 把对用户接口进行交互操作的相应代码放置到另一个类中。请回顾
第6课:国际化,然后把 RMIClient1.java
程序和 提示:
以下为参考方案:
更多信息有关面向对象的程序设计概念文件的详细说明,请参阅 Java 教程 中的 面向对象的程序设计概念。 1术语“Java virtual machine(Java 虚拟机)”或“JVM”在本网站中引用时是指适用于 Java 平台的虚拟机。 [TOP]
|
|
||||||||||||||||||||||||||||||||||||