第五章 java 面向对象程序设计

87
第第第 Java 第第第第第第第第 §5.1 第第第第第第第第第第第第第 §5.2 第第 §5.3 第 §5.4 第第第第 §5.5 第第第第 §5.6 第第第 §5.7 java 第第

Upload: titus

Post on 19-Mar-2016

124 views

Category:

Documents


2 download

DESCRIPTION

第五章 Java 面向对象程序设计. §5.1 面向对象程序设计的基本概念 §5.2 对象 §5.3 类 §5.4 类的继承 §5.5 接口与包 §5.6 内部类 §5.7 java 类库. §5.1 面向对象程序设计的基本概念. 类与对象 状态:变量 现实世界的对象 OOP 的对象 行为 :方法 对象是面向对象的程序设计模式,它由描述状态 的变量和用来实现对象行为的方法组成。 对象的典型的生存周期:创建,使用,释放. §5.1 面向对象程序设计的基本概念. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第五章  Java 面向对象程序设计

第五章 Java 面向对象程序设计§5.1 面向对象程序设计的基本概念§5.2 对象§5.3 类§5.4 类的继承§5.5 接口与包§5.6 内部类§5.7 java 类库

Page 2: 第五章  Java 面向对象程序设计

§5.1 面向对象程序设计的基本概念1. 类与对象 状态:变量

现实世界的对象 OOP 的对象 行为 :方法 对象是面向对象的程序设计模式,它由描述状态的变量和用来实现对象行为的方法组成。 对象的典型的生存周期:创建,使用,释放

Page 3: 第五章  Java 面向对象程序设计

§5.1 面向对象程序设计的基本概念1. 类与对象 类是一组具有相同基本成分的对象的集合,是用来创建对象的模板。 类也是一种数据类型,用户先根据需要定义一种类,然后才能用这种类来定义对象。而基本的数据类型是由系统预先定义的,用户可以直接使用它们。

类的组成:类的声明 { 变量 构造器 类体

方法 }

Page 4: 第五章  Java 面向对象程序设计

§5.1 面向对象程序设计的基本概念2. 消息与方法

程序的执行是靠在对象间传递消息来完成的。 一个由发送消息的对象发送的消息包含三个方面的

内容; 接收消息的对象 接收对象应采用的方法 方法所需用的参数方法是该类对象具有的各种操作。

Page 5: 第五章  Java 面向对象程序设计

§5.1 面向对象程序设计的基本概念3. 封装性,继承性,多态性

封装是一种信息隐藏技术,用户或其他对象只能看到对象封装界面上的信息,对象内部对用户是隐藏的。继承是一个类直接使用另一个类的所有属性和方法(权限为私有的除外)。 Java 采用单一继承的方式。多态性可用“一个对外界面,多个内在实现形式”来表示。 Java 通过方法重载和方法重写以及接口来实现。

Page 6: 第五章  Java 面向对象程序设计

§5.2 对象1. 创建对象 ( 生成对象)

Rectangle myrect = new Rectangle(0,0,100,200);1) 定义对象变量: 类名 对象名;2) 分配内存: new 运算符3) 初始化对象:即初始化对象中的实例变量。实例变量的初始化采用方式:

• 采用默认的初始值• 在声明变量时初始化• 使用初始化块• 使用构造方法(构造器)• 定义一个初始化方法

Page 7: 第五章  Java 面向对象程序设计

§5.2 对象2. 使用对象

例:移动 Rectangle 对象到一个新位置。1) 访问对象的成员

• 引用对象变量: myrect.x = 15;• 调用对象的方法: Myrect.move(15,37);

2) 对象做类的成员3) 方法中使用对象:方法参数和返回值4) 数组元素

3. 释放对象:自动垃圾回收(标记); finalize()

Page 8: 第五章  Java 面向对象程序设计

§5.3 类• 类是 java 中一种复合的数据类型,创建一个新类,

就是创建一种新的数据类型。• 实例化一个类,就得到一个对象。• 类有两种基本成分:变量和方法,成为成员变量

和成员方法。• 类的成员变量可以是基本数据类型的数据或数组

或类的实例。• 方法在类中定义,调用方法是完成消息传递。• 类提供外界访问其成员的权限。

Page 9: 第五章  Java 面向对象程序设计

§5.3 类—类的定义classDeclaration{

classbody}1. 类说明

• 关键字 class• 类名• 类的属性

类的超类 类中实现的接口 类是否为抽象的,最终的,以及访问权限

Page 10: 第五章  Java 面向对象程序设计

§5.3 类—类的定义2. 类体

• 成员变量说明• 成员方法的定义和实现

Page 11: 第五章  Java 面向对象程序设计

§5.3 类—类的定义 :类说明 类说明的完整格式:[类修饰符 ] class 新类名 [extends 超类名 ] [implement 接口名列表 ]

访问权限 +抽象最终 最终类:不能再有子类的类 ( final) 抽象类:不能直接创建对象的类 ( abstract) public:可以被任何类使用 缺省:该类只能被同一包中的其它类使用

Page 12: 第五章  Java 面向对象程序设计

§5.3 类—类的定义 :类体类体的完整格式:

类说明 { 类的成员变量说明; 类的成员方法的定义和实现; }

[成员变量修饰符 ] 类型 变量 [= 初始值 ][,变量 ];变量的访问权限: public,protected,default, private类变量还是实例变量: static是否为常量: final暂时性变量: transient

Page 13: 第五章  Java 面向对象程序设计

§5.3 类—类的定义 :类体共享变量 ( 多个线程共享): volatile[访问权限 ][类变量 ][ 常量 ][transient][volatile]

类型 变量 / 常量 [= 初始值 ][,变量 ];

Page 14: 第五章  Java 面向对象程序设计

§5.3 类—成员方法[方法修饰符 ] 方法的返回值类型 方法名称( [参数 1 ,

参数 2 …]){ …//方法体 }

一﹑方法说明二﹑ 方法体三﹑特殊方法

Page 15: 第五章  Java 面向对象程序设计

§5.3 类—成员方法:方法说明方法说明:[public|protected|private][static][final|abstra

ct][native][synchronized] returnType methodName([type name[,type name…]])[throw exceptionlist]方法的修饰符返回值类型方法名参数的类型和数目

Page 16: 第五章  Java 面向对象程序设计

§5.3 类—类变量和类方法的定义使用class Ahem{

int i;static int j:static int arr[]=new int[12];static{

for (int i=0;i<arr.lenth;i++)arr[i]=i;

}void seti(int i){ this.i=i; }static void setj(int j){Ahem.j=j; }

Page 17: 第五章  Java 面向对象程序设计

§5.3 类—类变量和类方法的定义使用static void dearThroat(){

Ahem a=new Ahem();Ahem.j=2;a.j=3;Ahem.setj(4);a.setj(5);a.i=3;a.seti(3);

}}

Page 18: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :返回值类型方法没有返回值,则其返回值类型为 void返回值可以是任一种数据类型:

基本类型和复合类型除了 void 外,方法中必须包含 return语句

Page 19: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :方法名Java 的合法标识符方法名的几种特殊情况

方法重载 : 即多个方法可以共用一个名字,同名的方法利用参数的数目和类型来区分方法的置换(重写) : 子类中可以再实现超类中的方法方法名与类名相同的方法是构造方法,与 NEW一起初始化对象

Page 20: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :参数的类型和数目参数名方法的参数名可以和类的成员变量同名Class circle{int x,y,radius;

public circle(int x,int y,int radius){this.x=x;this.y=y;this.radius=radius;}}

参数类型 任何合法的数据类型传递到方法中不能将一个方法作为参数传给另一个方法

Page 21: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :参数的类型和数目传值与传地址 ( 引用)

在方法中,简单数据类型的参数是传值的,而不是引用变量本身。好处是带来一定的安全性,使方法不能随意改变作用域外的变量。缺点是:有时需要改变一个或多个参数的值,用 return 也只能返回一个值。所以必须引用对象。因为对象的引用是对象在内存中的地址,从而使方法中的局部变量与调用者中的变量指向了同一个内存位置。

Page 22: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :传值方法段:class pen{

int redvalue=2,geenvalue=2,bluevalue=2;static void getRGBcolor(int red,int green,

int blue){red=redvalue;green=greenvalue;blue=bluevalue;

}}

Page 23: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :传值调用代码段:int r=-1,g=-1,b=-1;pen.getRGBcolor(r,g,b);System.out.println(“red=”+r+ “, green= ”+g+ “,blue= ”+b);

Page 24: 第五章  Java 面向对象程序设计

class pen{int redvalue=2,geenvalue=2,bluevalue=2;static void getRGBcolor(int red,int green,

int blue){red=redvalue;green=greenvalue;blue=bluevalue; } }

int r=-1,g=-1,b=-1;pen.getRGBcolor(r,g,b);System.out.println(“red=”+r+ “, green= ”+g+ “,blue= ”+b);

Page 25: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :传地址方法段:class pen{ int redvalue=2,geenvalue=2,bluevalue=2; static void getRGBcolor(RGBcolor acolor){

acolor.red=redvalue;acolor.green=greenvalue;acolor.blue=bluevalue;}}

class RGBcolor{ public int red=-1,green=-1, blue=-1;}

Page 26: 第五章  Java 面向对象程序设计

§5.3 类—方法说明 :传地址调用代码段:RGBcolor pencolor=new RGBcolor();pen.getRGBcolor(pencolor);System.out.println(“red=”+pencolor.red+ “,

green= ”+pencolor.green+ “,blue= ”+pencolor.blue);

Page 27: 第五章  Java 面向对象程序设计

class pen{ int redvalue=2,geenvalue=2,bluevalue=2; static void getRGBcolor(RGBcolor acolor){

acolor.red=redvalue;acolor.green=greenvalue;acolor.blue=bluevalue; } }

class RGBcolor{ public int red=-1,green=-1,blue=-1;}RGBcolor pencolor=new RGBcolor();pen.getRGBcolor(pencolor);System.out.println(“red=”+pencolor.red+ “, green= ”+pencolor.green+“,blue= ”+pencolor.blue);

Page 28: 第五章  Java 面向对象程序设计

§5.3 类—成员方法:方法体方法体中包含所有 JAVA代码

两个特殊变量 ( 类方法中不能使用)this :指向当前的对象

类的成员变量名方法的参数名 同名 清楚方法的局部变量

super :超类中的变量和方法子类成员变量和方法 同名,隐藏超类中超类成员变量和方法

this

super

Page 29: 第五章  Java 面向对象程序设计

§5.3 类—特殊方法结束方法为了有效的进行垃圾收集而引入的一个特殊方法

(必要时辅助工作)。protected void finalize(){ }

main 方法public static void main(String args[]){…}构造方法

Page 30: 第五章  Java 面向对象程序设计

§5.3 类—特殊方法构造方法是用来初始化新创建对象的特殊方法。构造方法没有自己独立的名字,与类名相同。构造方法不能从超类中继承(若没定义构造方法,则隐含构造方法是超类中没有参数的构造方法,没有则出错)必须和 new 一起使用修饰符只能是访问控制指示符( public、protected、private)

Page 31: 第五章  Java 面向对象程序设计

§5.3 类—特殊方法方法说明(如 java.awt.Rectangle 类)public Rectangle()public Rectangle(int,int)public Rectangle(int,int,int,int)public Rectangle(PointObject)public Rectangle(DimensionObject)public Rectangle(PointObject,

DimensionObject)

Page 32: 第五章  Java 面向对象程序设计

§5.3 类—特殊方法方法体{[this([Argumentlist]);] [super([Argumentlist]);] Blockbody}

Page 33: 第五章  Java 面向对象程序设计

程序示例1. 自定义方法2. 方法重载3. 类的定义

Page 34: 第五章  Java 面向对象程序设计

例 1 :自定义方法 (平方 )// SquareInt.javaimport java.applet.Applet;public class SquareInt extends Applet { public void init(){ int result; for ( int x = 1; x <= 10; x++ ) { result = square( x ); System.out.println("The square of " + x + " is " + result); } } public int square( int y ) { return y * y }}

Page 35: 第五章  Java 面向对象程序设计

例 2 :方法重载 (平方 )// MethodOverload.javaimport java.applet.Applet;public class SquareInt extends Applet { public void init(){ int result; for ( int x = 1; x <= 10; x++ ) { result = square( x ); System.out.println("The square of " + x + " is " + result); } }

Page 36: 第五章  Java 面向对象程序设计

例 2 :方法重载 public int square( int y ) { return y * y } public double square( double y ) { return y * y; }}

Page 37: 第五章  Java 面向对象程序设计

例 3 :类的定义(圆)// Circle.javapublic class Circle{ protected int x, y; protected double radius; public Circle() { setRadius( 0.0 ); } public Circle( double r, int a, int b ) { setA( a ) ; setB( b ) ; setRadius( r ); } public void setA( int a ) { x = a; }

Page 38: 第五章  Java 面向对象程序设计

例 3 :类的定义(圆) public void setB( int b ) { y = b ; } public void setRadius( double r ) { radius = r; } public int getA() { return x; } public int getB() { return y; } public double getRadius() { return radius; } public double area() { return Math.PI * radius * radius; }}

Page 39: 第五章  Java 面向对象程序设计

§5.4 类的继承

超类 子类派生继承

1. 子类 可直接使用超类中定义的变量和方法,具体的继承情况依赖于访问权限

2. 子类可重新定义超类的变量和方法• 变量的隐藏• 方法的置换

3. 子类可增加超类中没有的 变量和方法;

Page 40: 第五章  Java 面向对象程序设计

§5.4 类的继承 最终类、最终方法、抽象类、抽象方法 编译时多态(方法重载),运行时多态(方法重

写, instanceof )简单数据类型转换(自动和强制)类引用类型•自动:将一个子类对象赋给一个父类对象•强制(造型):将一个父类对象赋给一个子类对象

Page 41: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆// Point.javapublic class Point { protected int x, y; public Point() { setPoint( 0, 0 ); } public Point( int a, int b ) { setPoint( a, b ); } public void setPoint( int a, int b ) { x = a; y = b; }

Page 42: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆 public int getX() { return x; } public int getY() { return y; } public String toString() { return "[" + x + ", " + y + "]"; }}

Page 43: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆// Circle.javapublic class Circle extends Point { protected double radius; public Circle() { setRadius( 0 ); } public Circle( double r, int a, int b ) { super( a, b ); setRadius( r ); } public void setRadius( double r ) { radius = ( r >= 0.0 ? r : 0.0 ); }

Page 44: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆 public double getRadius() { return radius; } public double area() { return Math.PI *

radius * radius; } public String toString() {return "Center = " + "[" + x + ", " + y + "]" +";

Radius = " + radius; }}

Page 45: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆// InheritanceTest.javaimport java.text.DecimalFormat;public class InheritanceTest { public static void main( String args[] ) { Point pointRef, p; Circle circleRef, c; p = new Point( 30, 50 ); c = new Circle( 2.7, 120, 89 ); System.out.println("Point p: " + p.toString() + "\nCircle c: " + c.toString());

Page 46: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆 pointRef = c; System.out.println("\n\nCircle c (via pointRef): " + pointRef.toString()); circleRef = (Circle) pointRef; System.out.println("\n\nCircle c (via circleRef): " + circleRef.toString()); DecimalFormat precision2 = new DecimalFormat( "0.00" ); System.out.println("\nArea of c (via circleRef): " + precision2.format( circleRef.area() ) );

Page 47: 第五章  Java 面向对象程序设计

§5.4 类的继承示例:点,圆 if ( p instanceof Circle ) { circleRef = (Circle) p; System.out.println

(\n\ncast successful); } else System.out.println(\n\np does not refer

to a Circle) ; }}

Page 48: 第五章  Java 面向对象程序设计

§5.5 接口与包接口的概念 是一组方法定义和常量的集合。若想为几个类创

建一些类似功能,而这些功能在每一个类中都还有特定的实现时,就可以使用接口。( Runnable 接口)

Page 49: 第五章  Java 面向对象程序设计

§5.5 接口与包声明接口[public] interface InterfaceName [extends 接口列表 ]大写字母开头,以 able,ible结尾接口体interface Countable{ 常量说明; //public\final\static

方法定义; //public\abstract}

实现接口 (implements)

Page 50: 第五章  Java 面向对象程序设计

基本的继承实例// Shape.java// Definition of abstract base class Shapepublic abstract class Shape { public double area() { return 0.0; } public double volume() { return 0.0; } public abstract String getName(); }

Page 51: 第五章  Java 面向对象程序设计

// Point.javapublic class Point extends Shape { protected int x, y; public Point() { setPoint( 0, 0 ); } public Point( int a, int b ) { setPoint( a, b ); } public void setPoint( int a, int b ) { x = a; y = b; }

基本的继承实例

Page 52: 第五章  Java 面向对象程序设计

public int getX() { return x; }public int getY() { return y; }public String toString() { return "[" + x + ", " + y + "]"; }public String getName() { return "Point"; }}

基本的继承实例

Page 53: 第五章  Java 面向对象程序设计

基本的继承实例// Circle.javapublic class Circle extends Point { protected double radius; public Circle() {setRadius( 0 ); } public Circle( double r, int a, int b ) { super( a, b ); setRadius( r ); } public void setRadius( double r ) { radius = ( r >= 0 ? r : 0 ); }

Page 54: 第五章  Java 面向对象程序设计

基本的继承实例 public double getRadius() { return radius; } public double area() { return Math.PI * radius

*radius; } public String toString() { return "Center = " + super.toString() + "; Radius = " + radius; } public String getName() { return "Circle"; }}

Page 55: 第五章  Java 面向对象程序设计

基本的继承实例// Cylinder.javapublic class Cylinder extends Circle { protected double height; public Cylinder() { setHeight( 0 ); } public Cylinder( double h, double r, int a, int b )

{ super( r, a, b ); setHeight( h ); }

Page 56: 第五章  Java 面向对象程序设计

基本的继承实例public void setHeight( double h ) { height = ( h >= 0 ? h : 0 ); }public double getHeight() { return height; }public double area() { return 2 * super.area() + 2 * Math.PI * radius * height; }

Page 57: 第五章  Java 面向对象程序设计

基本的继承实例 public double volume() { return super.area() * height; } public String toString() { return super.toString() + "; Height = " + height; } public String getName() { return "Cylinder"; }}

Page 58: 第五章  Java 面向对象程序设计

创建和使用接口实例 Shape.java// Definition of interface Shapepublic interface Shape { public abstract double area(); public abstract double volume(); public abstract String getName(); }

Page 59: 第五章  Java 面向对象程序设计

创建和使用接口实例// Point.javapublic class Point implements Shape { protected int x, y; public Point() { setPoint( 0, 0 ); } public Point( int a, int b ) { setPoint( a, b ); } public void setPoint( int a, int b ) { x = a; y = b; }

Page 60: 第五章  Java 面向对象程序设计

创建和使用接口实例public int getX() { return x; }public int getY() { return y; }public String toString() { return "[" + x + ", " + y + "]"; }public double area() { return 0.0; }public double volume() { return 0.0; }public String getName() { return "Point"; }}

Page 61: 第五章  Java 面向对象程序设计

创建和使用接口实例// Circle.javapublic class Circle extends Point { protected double radius; public Circle() { setRadius( 0 ); } public Circle( double r, int a, int b ) { super( a, b ); setRadius( r ); }

Page 62: 第五章  Java 面向对象程序设计

创建和使用接口实例 public void setRadius( double r ) { radius = ( r >= 0 ? r : 0 ); } public double getRadius() { return radius; } public double area() { return Math.PI * radius * radius; } public String toString() { return "Center = " + super.toString() + "; Radius = " + radius; } public String getName() { return "Circle"; }}

Page 63: 第五章  Java 面向对象程序设计

创建和使用接口实例// Cylinder.javapublic class Cylinder extends Circle { protected double height; public Cylinder() { setHeight( 0 ); } public Cylinder( double h, double r, int a, int b ) { super( r, a, b ); setHeight( h ); } public void setHeight( double h ) { height = ( h >= 0 ? h : 0 );

Page 64: 第五章  Java 面向对象程序设计

创建和使用接口实例 public double getHeight() { return height; } public double area() { return 2 * super.area()

+ 2 * Math.PI * radius * height; } public double volume() { return super.area() *

height; } public String toString() { return super.toString() + "; Height = " +

height; } public String getName() { return "Cylinder"; }}

Page 65: 第五章  Java 面向对象程序设计

§5.5 接口与包—包为了防止名字冲突,取全限定的形式;封装性。Java API 包 类 ( 方法 , 变量 )包名 . 类名 .域名(变量名,方法名)如: java.io.System.out.println(“e”)

Page 66: 第五章  Java 面向对象程序设计

§5.5 接口与包—包Package语句:定义源文件中的类属于哪个包源文件第一句形式: package packagename可省略:对应源程序所在的目录

import语句:引入包或包中类位于package 和类中间形式: import package;

import package.class; import package.*;

Page 67: 第五章  Java 面向对象程序设计

§5.5 接口与包—包1. java.applet :提供创建 Applet 所必须的类,以及 Applet 与其上下文进行通信的类。2. java.awt :含有创建用户接口、绘图和图象的所有类。3. java.io :提供系统的输入与输出。4. java.lang :提供 Java编程语言最基础的类。5. java.net:提供了实现网络应用程序的类。6. java.sql :提供了使用 Java语言访问和处理数据源中数据的类。7. java.util :含有一个集合框架类、事件模型、日期和时间以及一些杂类,如针对 jar 和 zip技术的类。

Page 68: 第五章  Java 面向对象程序设计

§5.5 接口与包—包8. java.math:提供了用于执行任意精度整数算法和任意精度小数算法的类。9. java.beans :提供了与 bean 上下文有关的类和接口10. java.rmi :提供了 RMI包。11. java.security :提供了用于安全框架的类和接口。12. java.text :提供了与语言无关方式处理的文本、数据、数字和消息的类与接口。13. javax.swing :提供了一套“轻量级”的组件,在所有平台上都可工作。14. javax.naming :提供了访问命名服务的类和接口。创建用户接口、绘图和图象的所有类 .

Page 69: 第五章  Java 面向对象程序设计

§5.5 接口与包—包15. javax.accessibility :定义了用户接口组件和助手技术之间的一个约定。16. javax.rmi :提供用于 RMI-IIOP 的用户 API。17. javax.transaction:包含有三个关于事务上下文的异常类。18. javax.sound.midi :提供了用于MIDI的合成的类和接口。19. javax.sound.sampled :提供了样本音频数据的捕捉、处理、回放所需的接口和类。20.Org.omg.CORBA:提供了 OMG CORBA API到 JAVA语言的映射。

Page 70: 第五章  Java 面向对象程序设计

§5.5 接口与包—包实例创建包// Time1.javapackage com.deitel.chtp3.ch26;import java.text.DecimalFormat; public class Time1 extends Object {…}

Page 71: 第五章  Java 面向对象程序设计

§5.5 接口与包—包实例导入包中类// TimeTest.java

import com.deitel.chtp3.ch26.Time1; public class TimeTest { public static void main( String args[] )

{ Time1 t = new Time1(); t.setTime( 13, 27, 06 ); }}

java.lang 自动导入

Page 72: 第五章  Java 面向对象程序设计

§5.6 内部类内部类可以作为其他类的成员。这时内部类可以存取包含它的类的成员( static 类成员、实例成员、包括私有成员)。

内部类存取外部类成员内部类中加上修饰符存取同名外部类成员( this,outer 类名 .this)

内部类可以在一个语句块的内部定义。这时只能在语句块中创建对象。内部类可以在表达式内部被匿名定义

Page 73: 第五章  Java 面向对象程序设计

§5.6 内部类建立内部类对象

在外部类的实例成员方法中,可以直接建立内部类的对象。在外部类的类成员方法中,建立的内部类对象必须与外部类的对象相关。(外部类对象名 .new)在与外部类并行的其他类定义的方法中,建立的内部类的对象必须与外部类的对象相关,引用内部类名时必须使用完整的表识。

Page 74: 第五章  Java 面向对象程序设计

§5.6 内部类在一个类中可以包含多个内部类,且这些类可以同时用 public修饰。内部类的访问权限可以是: public,protected,private,default.内部类可以被声明为 static 属性。具有 static 属性的内部类变成了顶层类,不能再引用外部类对象。内部类可被定义为抽象类或接口而被其他内部类继承或实现。

Page 75: 第五章  Java 面向对象程序设计

§5.7 java 类库(常用类及数据结构)java.lang:

Object 类:根类 (clone,equals,hashCode,getClass,toString)Math类:含有执行基本数学运算的方法和常量。字符串类: String ,StringBuffer数据类型包装类系统和运行时 :类 System ( currentTimeMillis,arraycopy,getProperty,setProperties,gc,loadLibrary;in,out,err), 类 Runtime 访问运行时资源 (getRuntime,freeMemory,totleMemory,gc,loadLibrary)

Page 76: 第五章  Java 面向对象程序设计

§5.7 java 类库(常用类及数据结构)java.lang:线程类: Thread,ThreadDeath,ThreadGroup,Runnable类操作类:类 Class 访问类的运行时信息( forName,getName,getSuperclass,getClassLoader,isInterface,toString), 类 ClassLoader(loadClass,defineClass,resolveClass,findSystemClass)异常处理类: Throwable,Exception,Error过程类: Process, 使用类 Runtime 执行系统命令时,建立了 Process 类

Page 77: 第五章  Java 面向对象程序设计

§5.7 java 类库(常用类及数据结构)java.util:GregorianCalendar 类: Date数据结构类: BitSet,Hashtable,Vector,Enumeration,Dictionary,Properties,Stack。 Dictionary 是抽象类, Hashtable 是它子类; Properties派生于Hashtable ,提供可从流上读写的附加功能; Vector 实现动态数组, Stack派生于Vector 。

Page 78: 第五章  Java 面向对象程序设计

§5.7 java 类库(常用类及数据结构)java.util:

Random 类:用于生成一个伪随机数序列,( Random,nextDouble,nextFloat,nextGaussian,nextInt,nextLong,setSeed) 。观察器 :Observable 类, Observer 接口,程序为数据和关于数据的视图串标记类: StringTokenizer

Page 79: 第五章  Java 面向对象程序设计

本章小结概念思路读写面向对象程序

Page 80: 第五章  Java 面向对象程序设计

习题1. 概念:类、对象、方法、消息、封装性、继承性、

多态性2. 方法重载、方法重写3. 构造方法, main 方法4. 方法的调用(基本数据类型和复合数据类型)5. 访问权限,类变量和类方法,实例变量和实例方法6. Final,abstract,super ,this7. 接口、包、内部类、 java 类库及常用类和接口8. Instanceof, 造型

Page 81: 第五章  Java 面向对象程序设计

习题8. 读程序,说明程序的错误并改正 。import java.awt.Rectangle;public class SomethingIsWrong{public static void main(String[] args){Rectangle myRect;myRect.width=40;myRect.height=50;System.out.print("myRect's width is " +myRect.width+"myRect's height is "+myRect.height);}

}

Page 82: 第五章  Java 面向对象程序设计

习题9. 阅读下面的程序,写出指定部分的含义。 class circle{

int x,y,radius;public circle(int x,int y,int radius){

this.x=x;this.y=y;this.radius=radius;}}

10.解释 Java 中包访问的含义,解释包访问的负面影响。11.如指定一个构造方法的返回值类型,即使是 void ,会有什么情况发生?

Page 83: 第五章  Java 面向对象程序设计

习题12.创建类 Rectangle ,具有属性 length和 width,缺省值均为 1 。该类具有计算 perimeter (周长)和 area (面积)的方法,并有 length和width的设置和读取方法。设置方法应检验 length和 width是否大于 0.0且小于 20.0 的符点数。

Page 84: 第五章  Java 面向对象程序设计

习题13.创建类 SaveAccount 。包括储户年利率 , 每个储

户现在的存款余额。提供方法计算月息:用存款余额乘以年利率再除以 12 ;月息也应加到存款余额中。提供一个方法,设置年利率的新值。编写程序测试SaveAccount 。实例化两个不同的 SaveAccount对象, saver1 和 saver2 ,分别有存款 2000.00和 3000.00 元。将年利率设置为 4%,然后计算月息,并且打印每个储户的新存款余额。

Page 85: 第五章  Java 面向对象程序设计

习题14.重新设计和实现 oval 和 rectangle.

Page 86: 第五章  Java 面向对象程序设计

class A{ int x,y; A(int x,int y){this.x=x; this.y=y; } void setX(int x){ this.x=x;} void setY(int y){ this.y=y;} void out() {System.out.println("x="+x+";y="+y);} }class B extends A{ int z; B(int x,int y,int z){super(x,y); this.z=z; } void out(){System.out.println("x="+x+";y="+y+";z="+z);} }

Page 87: 第五章  Java 面向对象程序设计

public class ABTest{ public static void main(String args[]){

A a1=new A(3,4); a1.setX(6); a1.out(); B b1=new B(1,2,3); b1.setX(0); b1.setY(5); b1.out(); }

}