ch06面向对象编程.pdf

上传人:asd****56 文档编号:70322352 上传时间:2023-01-19 格式:PDF 页数:39 大小:1.79MB
返回 下载 相关 举报
ch06面向对象编程.pdf_第1页
第1页 / 共39页
ch06面向对象编程.pdf_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《ch06面向对象编程.pdf》由会员分享,可在线阅读,更多相关《ch06面向对象编程.pdf(39页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2012/11/29 第六章第六章 面向对象编程面向对象编程 JavaJava程序设计程序设计 http:/ 路路 强强 Page 2/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 本章学习提示本章学习提示 本章学习Java语言中面向对象编程的具体实施过程。封装与继承 覆盖与重载 多态 类的强制转换 “设计模式”初体验 -简单工厂模式 Page 3/39 Hefei University of Technology,School of Computer and

2、 Information Chapter6 面向对象编程面向对象编程 目目 录录 封装与继承 1 多态机制 3 2 覆盖与重载 类的转换 4“设计模式”初体验 简单工厂模式 5 Hefei University of Technology,School of Computer and Information Page 4/39 Chapter6 面向对象编程面向对象编程 封装封装 面向对象的程序设计 以类作为基本处理单元,对象是 类的实例。面向对象程序设计的重要特征是具有封装性、多态性和继承性。所谓封装封装表现在以下几个方面 1.在类的定义中设置对对象中的成员变量和方法进行访问的权限。2.提供

3、一个统一供其它类引用的方法。3.其它对象不能直接修改本对象所拥有的属性和方法。对象变量的四种访问权限 public protected private 默认默认 Page 5/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-封装封装 1./引用私有方法和修改私有成员变量引用私有方法和修改私有成员变量 2.class def06_01 3.private int x,y,z=0;4.private void method1()5.int x=3,y=4,

4、z;6.z=x*y;7.System.out.println(z=+z);8.public void show()9.System.out.println(z=+z);10.11.class ch06_01 12.public static void main(String args)13.def06_01 ss=new def06_01();14.ss.method1();/调用私有方法出错 15.ss.z=12;/修改私有变量出错 16.ss.show();17.18.1./引用引用公共方法和修改私有成员变量公共方法和修改私有成员变量 2.class def06_01b 3.private

5、 int x,y,z=0;4.public void method1()5.int x=3,y=4,z;6.z=x*y;7.System.out.println(z=+z);8.public void show()9.System.out.println(z=+z);10.11.class ch06_01b 12.public static void main(String args)13.def06_01b ss=new def06_01b();14.ss.method1();15.ss.z=12;16.ss.show();17.Page 6/39 Hefei University of T

6、echnology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-protected方法方法 1./定义类的定义类的protected 方法,通过创建对象来引用此方法方法,通过创建对象来引用此方法 2.class Max06_03 3.private int x,y;4.protected int play(int s,int t)5.int m;6.x=s;7.y=t;8.m=(xy)?x/y:y/x;9.return m;10.11.12.public class ch06_03 13.public static

7、 void main(String args)14.int result;15.Max06_03 ss=new Max06_03();16.result=ss.play(5,45);17.System.out.println(result=+result);18.19.使用使用protected定义的成员变量定义的成员变量或方法具有二重或方法具有二重性,类本身、子性,类本身、子类或包中的方法类或包中的方法可以访问它们,可以访问它们,而其它类没有访而其它类没有访问权限问权限 Hefei University of Technology,School of Computer and Informa

8、tion Page 7/39 Chapter6 面向对象编程面向对象编程 包包 未设定public或private访问权限,包内的所有类可以包内的所有类可以 访问它们,包外的不行。访问它们,包外的不行。一个Java程序文件只能定义一个public类,而且程序文件必须与它同名。为其它程序共享的类须经过编译进行打包,形为其它程序共享的类须经过编译进行打包,形成一个包文件,然后用成一个包文件,然后用import语句加以引用语句加以引用 打包 打包是在Java程序编译时进行的,注意参数-d 被编译程序所在路径 Javac d 被编译程序所在路径 被编译程序名.Java 被编译程序的第一行用packag

9、e 包名;给出它被打入的包,该包与系统创建的子目录同名 Page 8/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code “friendly”方法方法 1./将将ch06_04_bag类独立建成类独立建成ch06_04_bag.Java类文件,放入类文件,放入bag包中包中 2./以便其他程序直接调用以便其他程序直接调用,编译命令为编译命令为 C:Javac-d 路径路径 ch06_04_bag.Java 3.package bag;4.public cl

10、ass ch06_04_bag 5.public ch06_04_bag()System.out.println(this is a construct);6.public void doing()7.System.out.println(could you tell me);8.1./引用包引用包bag中的中的ch06_04_bag类文件类文件 2.import bag.ch06_04_bag;3.public class ch06_04 4.static void store()5.System.out.println(this is a store processing);6.publi

11、c static void main(String args)7.ch06_04_bag y=new ch06_04_bag();8.y.doing();9.store();10.未设定未设定public或或private访问权限的均访问权限的均为为“friendly”包内的所包内的所有类可以访问它们,有类可以访问它们,包外的不行包外的不行 Hefei University of Technology,School of Computer and Information Page 9/39 Chapter6 面向对象编程面向对象编程 类的继承类的继承 类之间的继承关系是现实世界中遗传关系的直接

12、模拟,它表示类之间的内在联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些特征。子类也可以具有自己独立的属性和操作。子类从父类继承有两个主要的方面:1.属性的继承属性的继承。例如,公司是一个父类,一个公司有名称、地址、经理、雇员等,这些都属于结构方面。2.方法的继承方法的继承。一个父类定义了若干操作,如一个公司要有项目开发、利润创造、经理任命、员工录用等操作,子公司也将继承这些行为。Hefei University of Technology,School of Computer and Information Page 10/39 Chapter6 面向对象编程面向对象编程 属

13、性继承与隐藏属性继承与隐藏 并不因为父类就意味着它有更多的功能。恰恰相反,子类比它们的父类具有更多的功能。因为子类是父类的扩展,增加了父类没有的属性和方法。子类不能访问父类的private成员,但子类可以访问其父类的public成员。protected访问是public和private访问之间一个保护性的中间层次。虽然被继承的父类成员没有在子类声明中列出,但是这些成员确实存在于子类中。Hefei University of Technology,School of Computer and Information Page 11/39 Chapter6 面向对象编程面向对象编程 构造方法的继承

14、构造方法的继承 构造方法的继承应遵守以下原则 1.子类可以无条件的继承父类不含参数的构造方法无条件的继承父类不含参数的构造方法 2.如果子类没有构造方法,则它继承父类无参数的构造方法作为自己的构造方法;如果子类有构造方法,那么在创建子类对象时,则将先执行继承下来的父类的构造方法,然后再执行自己的构造方法 3.对于父类中包含有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来引用,而且必须是必须是子类构造方法中的第一条语句子类构造方法中的第一条语句。Hefei University of Technology,School of Computer and Information

15、 Page 12/39 Chapter6 面向对象编程面向对象编程 终止继承终止继承 为了防止网络黑客将属于系统的重要信息的类来创建 其子类,将这些子类添加代码并替换原有的类,防止父类方法的覆盖,保持父类方法不会被子类中定义的方法替代,保证程序的安全有效的运行 处于这种考虑有时需要限制子类对某些方法的继承,通过关关键字键字final 来达到终止继承的目的 Page 13/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-终止继承终止继承 1./对父类中的

16、public方法设置final 属性,禁止子类继承父类中定义的方法 2./为系统安全考虑 防止父类方法被非法覆盖 3./本程序中父类定义的sum()方法具有final属性,子类不准许定义与sum同名方法 4.class mother06_07 5.int x=100,y=20;6.public final void sum()7.int s;s=x+y;8.System.out.println(s=+s);9.10.public class Children06_07 extends mother06_07 11.int m=20,n=30;12.public void sum()13.int

17、 f;14.f=m+n;15.System.out.println(f=+f);16.public static void main(String args)17.Children06_07 aa=new Children06_07();18.aa.sum();19.程序编译结果 出现错误提示 Hefei University of Technology,School of Computer and Information Page 14/39 Chapter6 面向对象编程面向对象编程 目目 录录 封装与继承 1 多 态 3 2 覆盖与重载 类的转换 4“设计模式”初体验 简单工厂模式 5

18、Hefei University of Technology,School of Computer and Information Page 15/39 Chapter6 面向对象编程面向对象编程 覆盖覆盖-override Java 允许子类对父类的同名方法进行重新定义,因此出现了同名方法而方法的内容不同的情况。出现这种情况时,子类引用方法需要指明引用的父类的方法还是子类的方法。引用父类方法时可采用super加上点再加上成员变量或方法名 如:super.成员变量 或 super.方法名(参数表)Hefei University of Technology,School of Computer

19、 and Information Page 16/39 Chapter6 面向对象编程面向对象编程 this&super 的区别的区别 在引用父类的方法时,为了明确的是父类方法需在方法 前加super。有时,因为继承虽然对子类的方法进行了重新定义,但是当前的方法中的形参明与成员变量名相同或与方法中的局部变量名相同,为了明确其含义,就要采用this关键字关键字加以区别。下面的例子中在创建Point3D类对象时引用Point2D类的构造器,使用super关键字来调用父类的方法super(a,b),对于限制继承的成员变量加上protected 说明,由于Point类和Circle类都存在toStri

20、ng()方法,所以在引用toString()方时用this和super加以区别。Page 17/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-this&super 1.class Point2D 2.int X;int Y;/Point2D私有属性私有属性 3.public Point2D()/无参的无参的Point2D构造方法构造方法 4.X=0;Y=0;5.6.Point2D(int x,int y)/有参的有参的Point2D构造方法构造方法

21、7.X=x;Y=y;8./System.out.println(Point2D Constructed With Parameters!);9.10.public String toString()11.return(Point position +this.X+this.Y);12.13.14.class Point3D extends Point2D 15.int X;int Y;int Z;/Point3D私有成员属性私有成员属性 16.public Point3D(int x,int y,int z)/有参构造函数有参构造函数 17.super(x,y);Z=z;18.19.publi

22、c String toString()20.return(super.toString()+this.Z);21.22.Page 18/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-this&super(续续)1.public class ch06_09 2.public static void main(String args)3.Point3D p1,p2;4.p1=new Point3D(1,2,3);5.System.out.println(

23、p1.toString();6.7.Hefei University of Technology,School of Computer and Information Page 19/39 Chapter6 面向对象编程面向对象编程 子类中与父类同名的成员变量的使用子类中与父类同名的成员变量的使用 在子类和父类中都存在同名的非私有成员变量时,对子类而言,只存在子类的成员变量,而不能引用父类的成员变量,如果一定要引用父类的成员变量,需要加上”super关键字。下面给出一个例子说明如何使用子类来引用父类的成员变量 /定义父类为Point2D,再定义子类Point3D /子类与父类具有相同的成员变量

24、 /若使用父类的 成员变量,应在变量前增加super前缀 所以子类的实例在进行赋值时,只改变子类成员变量的值,对父类成员变量值没有影响。子类覆盖父类中方法时,不能缩小“访问范围”。如:父类中方法是public的,子类在覆盖时不能改为protected 或private Hefei University of Technology,School of Computer and Information Page 20/39 Chapter6 面向对象编程面向对象编程 重载重载-overwrite 所谓方法的重载方法的重载,是在类中创建了多个方法,它们具有相同的名称,但有不同的参数和不同的实现。在调

25、用方法时依据其参数个数及类型自动选择相匹配的方法自动选择相匹配的方法去执行。达到各种对象处理类似问题时具有统一的接口目的。可以定义多个构造方法,根据类实例初始化时给定的参数列参数列表表决定使用哪一个 Page 21/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code 成员方法重载成员方法重载 1./定义多个同名方法,定义多个同名方法,实现的重载方法实现的重载方法 2./这些方法具有相同的名称,但有这些方法具有相同的名称,但有不同的参数列表不同的参数列表 3

26、.public class Calculate06_11 4.public static int abs1(int x)/定义整数运算的方法定义整数运算的方法 5.int y;6.y=x;7.if(y0)8.y=-y+5;9.return y;10.11.public static double abs1(double x)/定义双精数运算的方法定义双精数运算的方法 12.double y;13.y=x;14.if(y0)15.y=-y*2;16.return y;17.18.public static void main(String args)19.int m=-25;20.double

27、n=-8.27;21.System.out.println(m=+m+abs1(m);22.System.out.println(n=+n+abs1(n);23.24.Hefei University of Technology,School of Computer and Information Page 22/39 Chapter6 面向对象编程面向对象编程 目目 录录 封装与继承 1 多态机制 3 2 覆盖与重载 类的转换 4“设计模式”初体验 简单工厂模式 5 Hefei University of Technology,School of Computer and Informati

28、on Page 23/39 Chapter6 面向对象编程面向对象编程 多态机制多态机制 多态机制是面向对象程序设计的一个重要特征。多态的特点是采用同名的方式,根据调用方法时传送的参数的多 少以及传送参数类型的不同,调用不同的方法,这样对于类的编制而言,可以采用同样的方法获得不同的行为特征。多态性 1.编译时多态 表现为方法名相同,而参数表不同。典型:System.out.println();它的参数有很多种。2.运行时多态 程序运行的时候判断到底是哪个类(父类还是子类的),进而确定实际调用的方法 3.对象状态的判断 由于子类对象可以作为父亲类对象使用。那么我们有时需要判断这个对象究竟属于哪个

29、类。Java提供 instanceof 关键字。Page 24/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-多态多态 1.public interface Fruit 2.public void get();/采集采集 3.4.public class Apple implements Fruit 5.public void get()/采集采集 6.System.out.println(采集苹果采集苹果);7.8.9.public class B

30、anana implements Fruit 10.public void get()/采集采集 11.System.out.println(采集香蕉采集香蕉);12.13.14.public class MainClass 15.public static void main(String args)16./实例化一个实例化一个Apple 17.Apple apple=new Apple();18./实例化一个实例化一个Banana 19.Banana banana=new Banana();20.apple.get();21.banana.get();22.23.+get()Fruit+g

31、et()-weightApple+get()-weightBananaMainClassHefei University of Technology,School of Computer and Information Page 25/39 Chapter6 面向对象编程面向对象编程 目目 录录 封装与继承 1 多态机制 3 2 覆盖与重载 类的转换 4“设计模式”初体验 简单工厂模式 5 Hefei University of Technology,School of Computer and Information Page 26/39 Chapter6 面向对象编程面向对象编程 类的转换

32、类的转换 类的转换是指父类对象与子类对象之间在一定条件下父类对象与子类对象之间在一定条件下 可以转换可以转换,但类对象的转换须遵守以下原则:1.子类对象可以转换为父类对象 2.处于相同层次的类对象不能进行转换 或者说:子类对象可以被看作为父类的一个对象;反之父类对象不能看作为子类的对象。Page 27/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-类的转换类的转换 1./处理父类与子类的转换 注意转换应遵循的两条原则,例 PointTest.Java

33、 2.class Point2D 3.int X,Y;4.public Point2D()/无参的Point2D构造方法 5.X=0;Y=0;6.System.out.println(Point2D Constructed without Parameter!);7.8.Point2D(int x,int y)/有参的Point2D构造方法 9.X=x;Y=y;10.System.out.println(Point2D Constructed With Parameters!);11.12.void offset(int a,int b)/位移Point2D 13.X+=a;Y+=b;14.S

34、ystem.out.println(Point2D Offset to +this.X+this.Y);15.16.void show_2d()17.System.out.println(Point2D position +this.X+this.Y);18.19.Page 28/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 Code-类的转换(续)类的转换(续)1.public class Point3D extends Point2D 2./定义3D自己的

35、X,Y,Z 3.int X,Y,Z;4.public Point3D(int x,int y,int z)/3D的有参构造函数 5.X=x;Y=y;Z=z;6.System.out.println(Point3D Constructed with Parameters!7.+this.X +this.Y+this.Z);8.9.public Point3D(Point2D p2d,int z)/由2D扩展的构造函数 10.X=p2d.X;Y=p2d.Y;11.Z=z;12.System.out.println(Point3D Constructed from Point2D and Z!13.

36、+this.X+this.Y+this.Z);14.15.void offset(int a,int b,int c)/3D点的位移 16.this.X+=a;this.Y+=b;this.Z+=c;17.System.out.println(Point3D Offset!/n);18.19.void show_3d()20.System.out.println(Point3D position +this.X+this.Y +this.Z);21.22.Page 29/39 Hefei University of Technology,School of Computer and Infor

37、mation Chapter6 面向对象编程面向对象编程 Code-类的转换(续类的转换(续2)1.public class PointTest 2.public static void main(String args)3.Point2D p2d1,p2d2;4.Point3D p3d1,p3d2;5.p2d1=new Point2D(2,2);/生成父类对象 6.p3d1=new Point3D(3,4,5);/生成子类对象 7.p2d2=(Point2D)p3d1;/父类引用指向子类对象 8.p2d2.show_2d();/引用父类的成员变量 9.p2d2.show_3d();/父类不能

38、引用子类的方法 10.11./p3d2=(Point3D)p2d1;12./强制将父类对象转换为子类对象,系统出错 13.14.Hefei University of Technology,School of Computer and Information Page 30/39 Chapter6 面向对象编程面向对象编程 目目 录录 封装与继承 1 多态机制 3 2 覆盖与重载 类的转换 4“设计模式”初体验 简单工厂模式 5 Hefei University of Technology,School of Computer and Information Page 31/39 工厂模式工厂

39、模式 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。Chapter6 面向对象编程面向对象编程+get()Fruit+get()-weightApple+get()-weightBananaMainClass+get()Fruit+get()-weightApple+get()-weightBananaMainClass+getFruit():FruitFruitFactoryPage 32/39 Hefei University of Technology,School of Computer and In

40、formation 代码代码 1 水果类水果类 1.public interface Fruit 2./采集 3.public void get();4.5.public class Apple implements Fruit 6./采集 7.public void get()8.System.out.println(采集苹果);9.10.11.public class Banana implements Fruit 12./采集 13.public void get()14.System.out.println(采集香蕉);15.16.Chapter6 面向对象编程面向对象编程 课件代码:

41、“SimpleFactory_水果之例”Page 33/39 Hefei University of Technology,School of Computer and Information 代码代码 2 简单工厂类简单工厂类 1.public class FruitFactory 2./get方法,获得所有产品对象 3.public static Fruit getFruit(String type)throws InstantiationException,IllegalAccessException,ClassNotFoundException 4.if(type.equalsIgno

42、reCase(apple”)5.return Apple.class.newInstance();6.else if(type.equalsIgnoreCase(banana)7.return Banana.class.newInstance();8.else 9.System.out.println(找不到相应的实例化类);10.return null;11.12.13.Chapter6 面向对象编程面向对象编程 Page 34/39 Hefei University of Technology,School of Computer and Information 代码代码 3 主类主类 1

43、.public class MainClass 2.public static void main(String args)throws InstantiationException,IllegalAccessException,ClassNotFoundException 3.4./简单工厂方法创建水果对象 5.Fruit apple=FruitFactory.getFruit(Apple);6.Fruit banana=FruitFactory.getFruit(Banana);7./调用水果对象方法 8.apple.get();9.banana.get();10.11.Chapter6

44、面向对象编程面向对象编程 Hefei University of Technology,School of Computer and Information Page 35/39 模式中包含的角色及其职责模式中包含的角色及其职责 1.1.抽象(抽象(ProductProduct)角色)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。2.2.具体产品(具体产品(Concrete ProductConcrete Product)角色)角色 简单工厂模式所创建的具体实例对象 3.3.工厂(工厂(CreatorCreator)角色)角色 简单工厂模式的核心,它负责实现创建

45、所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。Chapter6 面向对象编程面向对象编程 Hefei University of Technology,School of Computer and Information Page 36/39 简单工厂模式的优缺点简单工厂模式的优缺点 优点:优点:在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,无需了解对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。缺点:缺点:简单工厂模式的缺点也正体现在其工

46、厂类。工厂类集中了所有实例的创建逻辑,“高内聚”方面不佳。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。Chapter6 面向对象编程面向对象编程 Hefei University of Technology,School of Computer and Information Page 37/39 Chapter6 面向对象编程面向对象编程 本章总结本章总结 本章学习了Java面向对象编程的具体实施过程。封装与继承 覆盖与重载 多态机制 类的强制转换 简单工厂模式 Page 38/39 Hefei University of Technology,School of Computer and Information Chapter6 面向对象编程面向对象编程 作业与练习作业与练习 1.什么是类的封装?如何对成员变量和方法的访问权限的设置达到数据封装的目的?2.子类能够继承父类的哪些成员变量和方法?3.编写程序实现子类对父类构造方法的引用 4.多态中的重载与覆盖有什么不同 5.编写一个程序来实现构造方法和其他方法的重载 6.自由阅读:大话设计模式,程杰,清华大学出版社 大象Thinking in UML,谭云杰,中国水利水电出版社 2012/11/29

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com