1 / 87

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

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

titus
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. §5.1 面向对象程序设计的基本概念 2. 消息与方法 程序的执行是靠在对象间传递消息来完成的。 一个由发送消息的对象发送的消息包含三个方面的内容; • 接收消息的对象 • 接收对象应采用的方法 • 方法所需用的参数 方法是该类对象具有的各种操作。

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

  6. §5.2 对象 • 创建对象(生成对象) Rectangle myrect = new Rectangle(0,0,100,200); • 定义对象变量: 类名 对象名; • 分配内存: new运算符 • 初始化对象:即初始化对象中的实例变量。实例变量的初始化采用方式: • 采用默认的初始值 • 在声明变量时初始化 • 使用初始化块 • 使用构造方法(构造器) • 定义一个初始化方法

  7. §5.2 对象 2.使用对象 例:移动Rectangle 对象到一个新位置。 • 访问对象的成员 • 引用对象变量:myrect.x = 15; • 调用对象的方法:Myrect.move(15,37); • 对象做类的成员 • 方法中使用对象:方法参数和返回值 • 数组元素 • 释放对象:自动垃圾回收(标记);finalize()

  8. §5.3 类 • 类是java中一种复合的数据类型,创建一个新类,就是创建一种新的数据类型。 • 实例化一个类,就得到一个对象。 • 类有两种基本成分:变量和方法,成为成员变量和成员方法。 • 类的成员变量可以是基本数据类型的数据或数组或类的实例。 • 方法在类中定义,调用方法是完成消息传递。 • 类提供外界访问其成员的权限。

  9. §5.3 类—类的定义 classDeclaration{ classbody } • 类说明 • 关键字class • 类名 • 类的属性 • 类的超类 • 类中实现的接口 • 类是否为抽象的,最终的,以及访问权限

  10. §5.3 类—类的定义 • 类体 • 成员变量说明 • 成员方法的定义和实现

  11. §5.3 类—类的定义:类说明 类说明的完整格式: [类修饰符] class 新类名 [extends 超类名] [implement 接口名列表] 访问权限+抽象最终 最终类:不能再有子类的类 (final) 抽象类:不能直接创建对象的类 (abstract) public:可以被任何类使用 缺省:该类只能被同一包中的其它类使用

  12. §5.3 类—类的定义:类体 类体的完整格式: 类说明{ 类的成员变量说明; 类的成员方法的定义和实现; } [成员变量修饰符] 类型 变量[=初始值][,变量]; 变量的访问权限:public,protected,default, private 类变量还是实例变量:static 是否为常量:final 暂时性变量:transient

  13. §5.3 类—类的定义:类体 共享变量(多个线程共享):volatile [访问权限][类变量][常量][transient][volatile] 类型 变量/常量 [=初始值][,变量];

  14. §5.3 类—成员方法 [方法修饰符] 方法的返回值类型 方法名称([参数1,参数2 …]){ …//方法体 } 一﹑方法说明 二﹑ 方法体 三﹑特殊方法

  15. §5.3 类—成员方法:方法说明 方法说明: [public|protected|private][static][final|abstract][native][synchronized] returnType methodName([type name[,type name…]])[throw exceptionlist] • 方法的修饰符 • 返回值类型 • 方法名 • 参数的类型和数目

  16. §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; }

  17. §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); } }

  18. §5.3 类—方法说明:返回值类型 • 方法没有返回值,则其返回值类型为void • 返回值可以是任一种数据类型: 基本类型和复合类型 • 除了void外,方法中必须包含return语句

  19. §5.3 类—方法说明:方法名 • Java的合法标识符 • 方法名的几种特殊情况 • 方法重载: 即多个方法可以共用一个名字,同名的方法利用参数的数目和类型来区分 • 方法的置换(重写): 子类中可以再实现超类中的方法 • 方法名与类名相同的方法是构造方法,与NEW一起初始化对象

  20. §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;}} • 参数类型 • 任何合法的数据类型传递到方法中 • 不能将一个方法作为参数传给另一个方法

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

  22. §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; } }

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

  24. 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);

  25. §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; }

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

  27. 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);

  28. §5.3 类—成员方法:方法体 方法体中包含所有JAVA代码 两个特殊变量(类方法中不能使用) this:指向当前的对象 类的成员变量名 方法的参数名 同名 清楚 方法的局部变量 super:超类中的变量和方法 子类成员变量和方法 同名,隐藏超类中 超类成员变量和方法 this super

  29. §5.3 类—特殊方法 结束方法 为了有效的进行垃圾收集而引入的一个特殊方法(必要时辅助工作)。 protected void finalize(){ } main方法 public static void main(String args[]){…} 构造方法

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

  31. §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)

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

  33. 程序示例 • 自定义方法 • 方法重载 • 类的定义

  34. 例1:自定义方法(平方) // SquareInt.java import 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 } }

  35. 例2:方法重载(平方) // MethodOverload.java import 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); } }

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

  37. 例3:类的定义(圆) // Circle.java public 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; }

  38. 例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; } }

  39. §5.4 类的继承 派生 超类 子类 继承 • 子类 可直接使用超类中定义的变量和方法,具体的继承情况依赖于访问权限 • 子类可重新定义超类的变量和方法 • 变量的隐藏 • 方法的置换 • 子类可增加超类中没有的 • 变量和方法;

  40. §5.4 类的继承 • 最终类、最终方法、抽象类、抽象方法 • 编译时多态(方法重载),运行时多态(方法重 写, instanceof) • 简单数据类型转换(自动和强制) • 类引用类型 • 自动:将一个子类对象赋给一个父类对象 • 强制(造型):将一个父类对象赋给一个子类对象

  41. §5.4 类的继承示例:点,圆 // Point.java public 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; }

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

  43. §5.4 类的继承示例:点,圆 // Circle.java public 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 ); }

  44. §5.4 类的继承示例:点,圆 public double getRadius() { return radius; } public double area() { return Math.PI * radius * radius; } public String toString() {return "Center = " + "[" + x + ", " + y + "]" +"; Radius = " + radius; } }

  45. §5.4 类的继承示例:点,圆 // InheritanceTest.java import 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());

  46. §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() ) );

  47. §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) ; } }

  48. §5.5 接口与包 • 接口的概念 是一组方法定义和常量的集合。若想为几个类创建一些类似功能,而这些功能在每一个类中都还有特定的实现时,就可以使用接口。(Runnable接口)

  49. §5.5 接口与包 • 声明接口 [public] interface InterfaceName [extends 接口列表] 大写字母开头,以able,ible结尾 • 接口体 interface Countable{ 常量说明;//public\final\static 方法定义;//public\abstract } • 实现接口(implements)

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

More Related