Java面向对象编程2.ppt_第1页
Java面向对象编程2.ppt_第2页
Java面向对象编程2.ppt_第3页
Java面向对象编程2.ppt_第4页
Java面向对象编程2.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章 Java面向对象编程 1 本章重点 n传统编程模式 n面向对象编程方法 nOOP的基本概念和特点 nJava中的OOP n理解Java中的各种修饰符 n超类和子类 n构造函数和重载的构造函数 2 3.1 传统编程模式 n面向过程 nCOBOL nFORTRAN nC n 主程序 函数3函数2函数1 函数4 3 3.2 面向对象的编程方法 对象A 数据 函数 数据 函数 数据 函数 对象B 4 3.3 面向对象编程的特点 n更强调数据而不是过程 n程序被划分为若干个对象 n数据结构体现对象的特点 n函数和数据结构联系紧密 n数据是隐藏的,外部函数无法访问数据 n对象之间通过函数联系起来 n需要时可以很方便地添加新的数据和函数 n遵循自上而下的程序设计方法 5 3.4 OOP的基本概念 n类 n对象 n数据抽象 n数据封装 n继承 n多态 6 n类 类是某种类型的所有对象定义共同变量和方 法的模板. 注意 类是用户定义的数据类型,它包括一个对象的 所有数据和代码. 3.4 OOP的基本概念 7 3.4 OOP的基本概念 n对象 neverything is an object n现实世界的对象: 桌子、书、自行车、电视、 狗、文件、表格、按钮、窗口 n对象的组成 n数据 n操作数据的代码 n类和对象的关系 n类是对象的模板(template)/抽象 n一个对象是类的一个实例(instance) 对象类 实例化 抽象 8 3.4 OOP的基本概念 n类是一个定义一 个对象的属性和 行为并且在设计 的时候产生的模 板或蓝图 n一个对象是一个 关于类的运行实 例,它占用内存 并且拥有一定的 生命周期 123 245 12 245 9 3.4 OOP的基本概念 n数据抽象 抽象是从大量的背景细节和详细解释中 提取共 同的实质性要素的过程. n数据抽象 n过程抽象 10 3.4 OOP的基本概念 n数据封装 n对象本身的数据得到保护/隐藏 n其他对象仅仅需要知道对该对象的访问方法(接 口/interface)即可 n封装的好处 n模块化-每个对象的源文件可以是相互独立的 ,可以被不同的程序调用,每个对象是一块积木 ,可以搭建不同的形状 n信息隐藏-通常定义一个公共接口/方法实现对 对象的访问,可以调整对象的私有信息和方法, 而不会对其他调用它的对象产生影响 11 3.5 在Java中创建类和对象 n创建类 n类是用来创建对象的蓝图或原型. n类的构建 n类的声明 n类的主体 12 3.5 在Java中创建类和对象 n类的声明 类修饰符 class 类名 extends 父类名 implements 接口名 常见的类修饰符 npublic: Declares that the class can be used by any class regardless of its package (无任何 限制) nabstract: Declares that the class cannot be instantiated (声明该类不能被实例化,抽象类, 出 现在继承关系中) nfinal: Declares that the class cannot be subclassed (声明该类不能有子类) n无修饰: a class can be used only by other classes in the same package (仅仅能被同一个包 中的其他类引用) 13 3.5 在Java中创建类和对象 n类主体 类主体包含两个部分:变量声明和方法 class ClassName Membervariable Declarations; Method Declarations; 14 3.5 在Java中创建类和对象 n成员变量声明 修饰符 类型 变量名; 修饰符 类型 变量名 =初值; 修饰符 类型 变量名 =初值 ,变量名 =初值; n成员方法定义 类成员修饰符 方法返回类型 方法名 () throws 异常名 方法体; n修饰符 n访问权限修饰符:public/protected/private n类型修饰符:static/final/transient/volatile 15 npublic (公共变量/公共方法) n容许全权访问,无任何限制 (先构造对象,再访问) 3.5 在Java中创建类和对象 同一个包中 class A A() ; public int x; public void print() ; class B void test() A a = new A(); a.x = 100; a.print(); 不在同一个包中 package abc; public class A public A() ; public int x; public void print() ; package xyz; import abc.A; class B void test() A a = new A(); a.x = 100; a.print(); 直接访问公有变量x 和公共方法print() 16 nprivate (私有变量/私有方法) n仅能在其所定义的类中被访问(先构造对象,再访问 ) D:javac A.java D:javac B.java x has private access in A a.x = 100; print() has private access in A a.print(); 2 errors 3.5 在Java中创建类和对象 同一个包中 class A private int x; private void print() ; void test () print(); class B void test() A a = new A(); a.x = 100; a.print(); 17 nprotected (保护变量/保护方法) n容许类本身、同一个包中所有类、以及子类访问(先 构造对象,再访问) 3.5 在Java中创建类和对象 同一个包中 class A protected int x; protected void print() ; class B void test() A a = new A(); a.x = 100; a.print(); 不在同一个包中 package abc; public class A public A() ; protected int x; protected void print() ; package xyz; import abc.A; class B extends A void test(B b) b.x = 100; b.print(); 18 n无修饰 (友好变量/友好方法) n容许类本身以及同一个包中所有类访问 3.5 在Java中创建类和对象 同一个包中 class A A() ; int x; void print() ; class B void test() A a = new A(); a.x = 100; a.print(); 同一个包中 package abc; class A A() ; int x; void print() ; package abc; class B void test() A a = new A(); a.x = 100; a.print(); 19 n访问权限修饰符小结 名称访问权 修饰 符 类本身子类包所有类 公共public 友好- 保护protected 私有private 3.5 在Java中创建类和对象 20 nstatic (静态变量/静态方法) n类的变量/方法,独立于类的对象,即不属于任何一 个类的具体对象,而是所有对象共享。可以直接根据 类名调用 class S static int A = 12, B = 34; static void print() ; class Test public static void main(String args) System.out.println(“A=“ + S.A + “ B=“ + S.B); S.print(); 3.5 在Java中创建类和对象 21 nstatic (静态变量/静态方法) class Test public void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); D:javac Test.java Test.java:9: non-static method print(int) cannot be referenced from a static context print(x); 1 error 3.5 在Java中创建类和对象 22 nstatic (静态变量/静态方法) class Test Test() ; public void print(int x) System.out.println(x); public static void main(String args) int x = 3; Test t = new Test(); t.print(x); class Test public static void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); static方法中仅仅可以调用其他static方法 3.5 在Java中创建类和对象 23 nfinal 变量/方法 nfinal变量: 定义一个常数,即变量值不能改 变 final double AVOGADRO = 6.022e23; nfinal类: 不能有子类 nfinal方法: 方法不能被重写(overriding),不 能被子类重新定义 3.5 在Java中创建类和对象 class A final void print() System.out.println(“1”); class B extends A void print() System.out.println(“1”); 24 3.5 在Java中创建类和对象 ntransient 标识出不属于对象稳定状态组成部分的特定 成员变量. nvolatile 声明变量可被异步修改. 25 3.5 在Java中创建类和对象 n方法的重载 方法重载是指多个方法享有相同的名字,但 是这些方法的参数必须不同,或者是参数的 个数不同,或者是参数类型不同。 返回类型不能用来区分重载的方法。 26 3.5 在Java中创建类和对象 n方法的重载(overload) n方法名相同,但方法的参数不同 方法描述 方法名(标识符) 参数类型 方法返 回值 绝对值 abs(a) int int 绝对值 abs(a) long long 绝对值 abs(a) float float 绝对值 abs(a) double double public static int abs(int a) public static long abs(long a) public static float abs(float a) public static double abs(double a) 27 3.5 在Java中创建类和对象 n方法的重载 import java.io.*; class MethodOverloading void receive(int i) System.out.println(“Receive one int data“); System.out.println(“i=“+i); void receive(int x, int y) System.out.println(“Receive two int datas“); System.out.println(“x=“+x+“ y=“+y); public class MethodOverloadingTest public static void main(String args) MethodOverloading mo=new MethodOverloading(); mo.receive(1); mo.receive(2,3); 28 3.6 构造函数 n构造函数是类的一种特殊方法,它的特殊性 主 要体现在如下的几个方面: n构造函数的方法名与类名相同. n构造函数没有返回类型. n构造函数的主要作用是完成对类对象的初始化 工作. n构造函数不能由编程人员显式地直接调用. n在创建一个类的新对象的同时,系统会自动调 用该类的构造函数为新对象初始化. 29 3.6 构造函数 n构造函数的定义与使用 class CCircle / 定义类CCircle private double pi=3.14; private double radius; public CCircle(double r) / 定义构造函数CCircle() radius=r; public void show() System.out.println(“radius=“+radius+“, area=“+pi*radius*radius); public class constructdemo1 public static void main(String args) CCircle cir1=new CCircle(4.0); / 建立对象并调用CCircle()构造函数 cir1.show(); 30 3.6 构造函数 class CCircle /定义类CCircle private String color; private double pi=3.14; private double radius; public CCircle() / 没有参数的构造函数 System.out.println(“constructor CCircle() called“); radius=1.0; color=“Green“; public CCircle(String str, double r) / 有两个变量的构造函数 System.out.println(“constructor CCircle(String,double) called“); color=str; radius=r; public void show() System.out.println(“color=“+color+“, Radius=“+radius); System.out.println(“area=“+pi*radius*radius); public class constructdemo2 public static void main(String args) CCircle cir1=new CCircle(); cir1.show(); CCircle cir2=new CCircle(“Blue“,4.0); cir2.show(); 31 例:一个会做加法的机器人 class Sman public String sex; public Sman(String Initsex) sex=Initsex; public void sum(int x,int y) int z=x+y; System.out.println(z); class C public static void main(String args) Sman m1=new Sman(“man“); m1.sum(4,5); 32 方法的重载 class Sman public String sex; public Sman(String Initsex) sex=Initsex; public void sum(int x,int y) int s=x+y; System.out.println(z); public void sum(int x,int y,intz) int s=x+y+z; System.out.println(s); 33 3.7 垃圾回收 n内存管理技术 当对象不再使用时,Java运行时环境将删除 对 象,这个过程就是垃圾回收. System.gc()运行垃圾回收器 finalize() 34 3.8 finalize方法 n回收之前释放的系统资源 n例 protected void finalize() 语句块 35 3.9 继承 n为什么会有继承? n建立一个类后,发现另一个新的类有相类似的 特性,两个选择: 重新定义一个新的类; 在已有类 的基础上进行扩展(增加或赋予新的特性) n超类和子类 n继承和发扬 n继承父类的方法和变量 n添加新的方法/变量以及方法的重写 (overriding) n树型结构(层次化结构) n根(基类) 36 3.9 继承 运输工具 航空运输工具陆地运输工具水上运输工具 人力驱动引擎驱动 二轮四轮 客运货运 n客观实例 37 3.9 继承 n父类和子类 n子类继承(拥有)父类所有的数据和方法 n同时子类可以定义新的数据和方法 n“青出于蓝,而胜于蓝” 38 3.9 继承 nObject类全体类的父类 处于类层次关系中最上层的类 几个常用方法: protected Object clone() public String toString() public boolean equale(Object obj) public final Class getClass() nClass类 39 3.9 继承 n继承的实现 继承的实现主要有以下几个步骤: n确定父类. n定义子类. 语法: 类修饰符 class 子类名 extends 父类 名 n实现子类的功能. 40 3.9 继承 n示例 class A public int a1;private float a2; int getA() return(a1); void setA() class B extends A int b1;String b2; String getB() return(b2); class C extends B int c; int printC()System.out.println(c); 类B所拥有的成员? 类C所拥有的成员? a1,b1,b2,getA(),setA(),getB() a1,b1,b2,c,getA(),setA(),getB(),pirntC() 41 3.9 继承 n构造函数的继承 n子类无条件地继承父类的不含参数的构 造函数; n 如果子类自己没有构造函数,则它将继 承父类的无参数构造函数作为自己的构造 函数;如果子类自己定义了构造函数,则 在创建新对象时,它将先执行继承父类的 无参数构造函数,然后再执行自己的构造 函数。 n对于父类的含参数构造函数,子类可以 通过在自己构造函数中使用“super”关键字 来调用它,但这个调用语句必须是子类构 造函数的第一个可执行语句 42 3.9 继承 public class A public static void main(String args) B b=new B(1); A() System.out.print(“A“); A(int i) this(); System.out.print(“AA“); class B extends A B() super();System.out.println(“B“); B(int i) super(i); System.out.println(“BB“); A(i) AAA 43 第二代机器人Tman public class Tman extends Sman public int weight; public Tman (String Initsex,int Initweight) super(Initsex); weight=Initweight; public void max(int x,int y) if (xy) System.out.println(x); else System.out.println(y); this. weight=Initweight; 44 3.9 继承 n不支持多重继承 类A 类B类C类D 类F类G n一个类拥有多个父类产生二义性,例类C和类D都 有一个同名的方法,类G? nJAVA中仅仅支持单一继承,同时JAVA采用 Interface(接口)实现多重继承而避免父类二义性 45 3.10 多态 n存在于子类和超类之 间 n多个子类同属一个超 类,所有子类有相同 的超类 (继承超类的 方法) n在不同的子类中同样 的方法有不同的表现 形式 46 3.10 多态 n子类对父类的变量隐藏和方法覆盖 变量隐藏:当子类的成员变量与父类的 成 员变量同名时,称子类的成员变量隐藏了 父类的成员变量. 子类用super调用父类的同名变量: super.变量名 47 3.10 多态 public class ExtendsExam public static void main(String args) subclass e=new subclass(); System.out.println(“ Sup_getX()方法结果:“+e. Sup_getX(); System.out.println(“ Sub_getX()方法结果:“+e.Sub_getX(); class superclass public int x=10; int Sup_getX()return(x); class subclass extends superclass private int x=20; int Sub_getX()return(x); 48 3.10 多态 n方法覆盖:子类重新定义从父类继承来 的 同名方法称为方法的覆盖. 子类用super调用父类的同名方法: super.方法名() 注:方法覆盖仅发生在两个方法的名字、 参 数列表和返回值完全一致的情况下.否则 , 会产生编译错误. 49 3.10 多态 class superClass void superPrint()System.out.println(“This is superClass!“); class subClass extends superClass void superPrint()System.out.println(“This is subClass!“); public class myInherit public static void main(String args) subClass subObject = new subClass(); subObject.superPrint(); /子类对象调用子类的方法 superClass superObject = new superClass(); superObject.superPrint(); /父类对象调用父类的方法 50 方法重写 public class Tman extends Sman public int weight; public Tman(String Initsex,int Initweight) super(Initsex); weight=Initweight; public void max(int x,int y) if (xy) System.out.println(x); else System.out.println(y); public void sum(double d,double e) double s=d+e; System.out.println(s); 51 3.10 多态 nthis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论