行 言 面向对象程序设计基础(下) 类属性 类方法 包 限定符 接口 内部类.

Slides:



Advertisements
Similar presentations
网络应用程序设计 2014 JavaBean. JavaBean 及其属性 JavaBean 就是一种 Java 的组件技术 JavaBean 是 Java 类 JavaBean 通过约定的方法名实现属性功能 简单属性 void setXxx(Type value) Type getXxx() boolean.
Advertisements

1 类的严谨定义格式如下: [ 类修饰符 ] class 类名 [extends 父类名 ] [implements 接口列表 ] { 数据成员 成员方法 } 类的严谨定义.
第3章 使用类和对象编程 软 件 学 院 朱士明 副教授.
第4章 Java中的几个关键字 Java 语言编程技术.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第四章 类与对象.
第3章 面向对象的编程技术.
第4章 类 和 对 象.
第四章 对象与类 掌握面向对象程序设计语言的特点 理解对象、类,类和对象的关系 掌握类,成员变量,方法的定义 掌握构造方法的定义
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
配合< Java面向对象程序设计>例子源代码一起使用
Java的面向对象程序设计.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
Oracle数据库 Oracle 子程序.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 Java面向对象程序设计 3.1 Java的类和对象 3.2 域和方法 3.3 访问控制符 3.4 继承
第五章 Java面向对象编程基础 类:现实世界中实体的抽象集合。 5.1定义类 定义类的过程就是定义类的属性和服务的过程;
第14章 c++中的代码重用.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
类与对象 Java 实用技术4 类与对象
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
JAVA程序设计 (03) JAVA Programming
第六章 JAVA语言中的面向对象特性 6.1 类 6.2 对象 6.3 面向对象的特性 6.4 抽象类、接口和Inner Class.
主讲:朱红英 tel: java程序设计 主讲:朱红英 tel:
第四章 Java面向对象程序设计.
3.3 Java的非访问控制符 Java的非访问控制符 static 静态修饰符 修饰属性和方法 abstract 抽象修饰符 修饰类和方法
JAVA 面向对象基础知识 主要内容: 1.面向对象基本概念 2.Java的类与对象 3.成员变量与封装 成员方法.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
Java程序设计 第4章 类、包和接口.
程式設計實作.
CH09 套件 物件導向程式設計(II).
第4章 类、对象和接口 4.1 编程语言的几个发展阶段 4.2 类 4.3 对象 4.4 static 关键字 4.5 this 关键字
Java习题解析.
Java程序设计 第9章 继承和多态.
辅导课程六.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第二章 Java语言基础.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第7章 包及访问控制权限 7.1 包的基本概念 7.2 系统常见包 7.3 包的导入 7.4 访问控制权限修饰符 7.5 jar命令的使用.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C++复习3 ----类的继承与派生.
C#面向对象程序设计 $6 深入理解类.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java语法基础.
3.5 Java的包与访问控制符.
Chapter 18 使用GRASP的对象设计示例.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Summary
Presentation transcript:

行 言 面向对象程序设计基础(下) 类属性 类方法 包 限定符 接口 内部类

类变量(静态变量) 类变量——为类的各实例共享的变量。 static 静态变量 ; 位于类的内存区域中,为该类的各个对象共享. 无此限定符的变量是实例变量。 class ex { int i ; static int j ; static final int k=10 ; --- } 为节省空间, final 常量可同时 定义为static 类ex j k=10 对象1 i : 3 对象2 i : 5

类变量(静态变量) 实现各实例之间的通讯。 跟踪创建的实例数。 public class Count { private int serial ; //成员变量 private static int counter = 0 ; //类变量 public Count() { counter++; serial = counter ; } 静态变量类似于某些语言中的全局变量。

类变量(静态变量) 1 非private 的静态变量无须创建实例就可以从类的外部访问。 public class StaticVar { public static int x ; } public class test { public void m() { int m = StaticVar.x ; 1

类变量(静态变量) 2 class PhoneCard200 { static final String connectNumber = “200”; static double additoryFee; long cardNumber ; int password; boolean connected; double balance; … } 2

类变量(静态变量) public class a { public static void main(String args[]) { PhoneCard200 my200_1 = new PhoneCard200(); PhoneCard200 my200_2 = new PhoneCard200(); PhoneCard200.additoryFee = 0.1; System.out.println(“第一张200卡的接入号码:” + my200_1.connectNumber); System.out.println(“200卡接入号码:” + PhoneCard200.connectNumber); System.out.println(“第二张200卡的附加费: ” + my200_2.additoryFee); System.out.println(“200卡类的附加费:” + PhoneCard200.additoryFee); } }

类方法( 静态方法) 类方法: static 方法名(…) { …} 使用类方法不用创建类的对象。调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。 非static的方法是对象方法(或称实例方法)。 类方法中不能访问实例变量,而只能访问类变量(static方法 — static域)和自己的方法参数。 类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。 类方法中没有this值。

类方法( 静态方法) 3 public class a { public static void main(String[] args){ System.out.println(Math.round(3.54)); String s = to_char(2.718); System.out.println(“e=“ + s ); } static String to_char(double x) { return Double.toString(x); 3

类方法( 静态方法) main方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。 将这些方法设计成静态方法, 创建对象,使用对象方法。 一个静态方法不能被一个非静态方法所覆盖。

类的初始化-静态初始化器 4 由关键字static引导的一对大括号括起的语句组。用来完成类的初始化的工作, 与构造方法的区别: 构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化; 构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行; 不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。 4

小结—类与对象 面向对象的数据和方法: 共享的数据和方法: 一个类的对象虽然具有相同的属性,但对象却各不相同(属性值不同)。 一个类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不同。 共享的数据和方法: 类属性 — 在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。 类方法 — 不需要实例就能使用静态的方法和数据,虽然它们也能通过实例来访问。

小结—类与对象 类名.域名 静态域,在类的空间里,是该类对象共享的单元 类名.方法名 静态方法 — 类方法的调用 类方法及域也可以用对象名调用,但最好用类名 对象名.属性名 实例变量 。提倡通过方法操作属性。 对象名.方法名 方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。

小结—类与对象 访问一个类: final 创建该类的对象,并使用该类对象的可见属性与方法。 调用该类的可见静态方法,访问该类的可见静态属性。 继承该类。 final final类不能被继承。 final 方法不能被覆盖。 final 域不能被修改。

包(package) 在操作系统中,目录用来组织文件,设置权限。 Java利用包来组织相关的类,并控制访问权限。 包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等等。 由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。 利用包来管理类,可实现类的共享与复用(类库)。

编译单元 一个java源代码文件称之为一个编译单元。 一个编译单元中只能有一个public类,该类名与文件名相同。编译单元中的其他类是该主public类的支撑类。 经过编译,编译单元中的每个类都产生一个 .class文件。 java的工作程序是一串.class文件, JAVA解释器负责寻找、加载和解释这些文件。 (不象其它语言最终生成一个.exe的可执行文件)

类的名字空间 所有类成员的名字都是相互隔离的。类A中的方法m1与类B中的方法m1互不相干,但类名就有冲突的问题了。 在一个Java程序运行过程中,某些类会从internet上自动下载,而用户并不知晓。所以在java中需要名字空间的完全控制,以便可以建立一个唯一的类名。 包用于类的名字空间管理。 作为包的设计人员,利用包来划分名字空间以避免类名冲突(package 和 import)

包与目录 d1 classpath = d:\d1; d:\d1\d2 d2 p1 p3 包 p2 类 一个包可以包含若干个类文件,还可包含若干包。 包名本身又对应一个目录(用一个目录表示)。 包名可以有层次,以小数点分割。包名一般全小写(类名第一个字母大写) 。 d1 classpath = d:\d1; d:\d1\d2 d2 p1 p3 包 p2 类

编译单元与包 当前包 package 编译 单元 其他包 其他包 import 对象三步曲: 打开包(import,package) 加载类(程序中只有类定义的一份拷贝) 建对象(用new运算符可以创建一个类的若干实例) 当前包 package 编译 单元 其他包 其他包 import

编译单元与当前包 显式指定编译单元的当前包。 package 包名 ; 编译单元对当前包可以读写。 无名包中 的类是为了局部应用。 不管“当前包”是显式指定还是采用隐含值,总是当前名字空间的一部分。

使用其他包中的类 import语句将指定包中的类引入当前的名字空间,即告诉编译到哪去找程序中使用的类。 import语句不加载包中的类。 例:import java.util.* ; 该语句引入整个utility 类库(标准Java库的一部分) 例:import java.util.Vector ; 该语句只引入Vector类,但utility类库中的其他类不可用。

从包中加载类 当程序需要建立一个类的对象,或是第一次访问类的静态成员时,会动态加载类文件。 JAVA解释器加载类过程: 将环境变量CLASSPATH包含的一个或多个目录作为起始目录。 解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径。 查找目录下的 .class文件 import p1.p2.* 转换为 p1\p2\*.class 或 p1/p2/*.class (取决于操作系统)

创建包、添加类 5 package mypk ; public class myc{…} javac –d d:\ myc.java 会在指定目录下建包 set CLASSPATH=.;d:\; %CLASSPATH% import mypk.* ; public class testa { public static void main(String args[]) { myc c = new myc() ; …. } 5

jar文件 jar cf j.jar *.class 建立jar文件 jar tf j.jar 列表jar文件 java -cp j.jar test    执行jar文件中的类

访问控制符 访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符 。 类访问控制符 公共类 :public 类名 一般类 一个包中的类只能访问另一个包中的public类。 一般类只能在同一包中使用,一个包中的类不用说明可相互访问。 把常在一起协同工作的类放在一个包里是很自然的。

域和方法的访问限定符 6 一个类作为整体对程序的其他部分可见,并不能代表类内的所有域和方法也同时对程序的其他部分可见,前者只是后者的必要条件 域和方法的可见性 public 公共域和公共方法,可被任何类使用。 protected 可被同包中其他类使用。 可 被子类继承(包括位于不同包中的子类) 无访问限定符 private 只限在本类内使用。 6

域和方法的访问限定符 为了使对象具有良好的封装性,一般将类的实例变量设计成私有。 为了使其它类或对象能够访问私有实例变量,本类必须提供访问私有变量的方法(公共方法)。 按照惯例,读私有变量的方法取名为get… 写私有变量的方法取名为 set…

接口 “接口”是抽象类的概念。 接口中的方法都是没有方法体的抽象方法。 接口中只能定义 static final 属性 。 接口定义的仅仅是实现某一特定功能的一组方法的对外接口和规范,而并没有真正地实现这个功能。 接口的功能实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。 通常把对接口的“继承”称为“实现”。

接口的实现 Object 接口 继承 实现 Abstract class 类 class class java—单重继承 final class

接口的定义 public interface 接口名 [extends 父接口名列表] { // 常量域声明 { // 常量域声明 public static final 域类型 域名 = 常量值; // 抽象方法声明 public abstract 返回值类型 方法名( 参数列表 ) ; } 接口是由常量和抽象方法组成的特殊类。

接口的实现 public class MyApplet extends Applet implements Runnable , MouseListener { … … } 一个类只能有一个父类,但是它可以同时实现若干个接口。如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多继承。 instanceof 运算符可用来判断一个对象的类是否实现了某个接口。

接口例 7 interface CalArea { double pi = 3.14 ; double cal(double r) ; } class a implements CalArea { public double cal(double r) { return pi * r *r ; 7

接口的规定 类定义中使用 implements 指定实现某一接口 类中必须具体实现该 interface 中定义的抽象方法。 实现的方法必须指定为public限定符。 实现接口的类要实现接口的全部方法。如果不需要某个方法,也要定义成一个空方法体的方法。 Public 方法名() { }

接口的应用 声明多个类必须实现的方法。 利用接口模拟多继承。 只说明对象的编程接口,而不揭示实际的类体。 编程者可以把用于完成特定功能的方法组织成相对独立的集合体—接口。凡是需要实现这种特定功能的类,都必须实现这个接口。 利用接口模拟多继承。 java程序中的类层次结构是树状结构,这种树状结构在处理某些复杂问题时会显得力不从心。 接口在保持单继承优点的前提下,使Java程序的类层次结构更加合理,更符合实际情况。 只说明对象的编程接口,而不揭示实际的类体。 类库分发

系统定义的接口 该接口代表了监听并处理动作事件的功能,它包含了一个抽象方法 actionPerformed public interface ActionListener extends EventListener { public abstract void actionPerformed(ActionEvent e); } 该接口代表了监听并处理动作事件的功能,它包含了一个抽象方法 actionPerformed 所有希望能够处理动作事件(如单击按钮、在文本框中回车等)的类都必须具有ActionListener接口定义的功能,也就是要实现这个接口,

内部类(inner class) 在某个类的内部定义的类称之内部类。 内部类的定义方法 内部类的类文件命名方法 定义命名的内部类:可以在类中(甚至方法中)定义内部类,并在类的内部多次使用(创建多个对象)。 定义匿名内部类(一次性使用):可以在new关键字后定义内部类,并立即创建一个对象 内部类的类文件命名方法 设外层类名为Myclass,则该类的内部类名为: Myclass$c1.class (c1 为命名内部类名) Myclass$1.class (表示类中定义的第一个匿名内部类)

类中的内部类 8-Parcel2 在类中如同使用其他类一样使用自己的内部类。 内部类拥有对在外层类中定义的所有属性和方法的访问权。 其他类如果要使用一个类的内部类时,要使用类前缀。 8-Parcel2

类中的内部类 8-Parcel3 一般类只能是public和非public,而内部类可以指定为 private 和 protected。 内部类可以实现接口及抽象类中的抽象方法。 外层类可以将上述实现细节、乃至内部类都隐藏起来,给外界提供一个指向基类及接口的处理句柄。 8-Parcel3

方法中的内部类 内部类还可以定义在一个方法里,其作用域仅限于该方法的范围内(进一步隐藏),在其它方法里定义也没有名字冲突问题。 实现一个接口,但只返回一个句柄 在一编写好的代码中加一个类,但又不想公开化。 8-Parcel4

条件分支中的内部类 在条件分支中的内部类并不表示有条件的建立,同其他类一样,在编译时就一道解决了,内部类只是限定它的作用域(在条件分支中使用)。 if (e) {类定义} 8-Parcel5

实现接口的无名内部类 8-Parcel6 return new Contents() { //调用隐含构造函数 private int i = 11; //Contents是接口 public int value() { return i; } }; //分号表示表达式的结束 该语句将返回值同表示返回值类型的类定义结合在一起。它相当于: class MyContents implements Contents { private int i = 11; public int value() { return i; } } return new MyContents(); 8-Parcel6

有名内部类例 public class MyFrame extends Frame { … button1.addActionListener( new Button1Adapter()); class Button1Adapter implements ActionListener { public void actionPerformed(ActionEvent e) { …. } } // end of Button1Adapter class } // end of Frame1 class

匿名内部类例 匿名类可实例化一个接口 button1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { …. } } ); 使用接口创建对象的一般途径是创建实现该接口的一个类定义,然后使用类来创建一个对象)。