ch06面向对象编程.pdf
《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 /子类与父类具有相同的成员变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch06 面向 对象 编程
限制150内