java程序设计雍俊海第三章.ppt

上传人:牧羊曲112 文档编号:6510035 上传时间:2023-11-07 格式:PPT 页数:80 大小:429KB
返回 下载 相关 举报
java程序设计雍俊海第三章.ppt_第1页
第1页 / 共80页
java程序设计雍俊海第三章.ppt_第2页
第2页 / 共80页
java程序设计雍俊海第三章.ppt_第3页
第3页 / 共80页
java程序设计雍俊海第三章.ppt_第4页
第4页 / 共80页
java程序设计雍俊海第三章.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《java程序设计雍俊海第三章.ppt》由会员分享,可在线阅读,更多相关《java程序设计雍俊海第三章.ppt(80页珍藏版)》请在三一办公上搜索。

1、2023/11/7,1,Java程序设计Programming in Java,雍俊海清华大学软件学院School of Software,Tsinghua University,2023/11/7,2,教材,雍俊海.Java程序设计教程.北京:清华大学出版社,2007.,2023/11/7,3,习题集,雍俊海.Java程序设计习题集(含参考答案).北京:清华大学出版社,2006.,2023/11/7,4,参考文献,本课件的参考文献与下面书的参考文献相同雍俊海.Java程序设计教程.北京:清华大学出版社,2007.雍俊海.Java程序设计习题集(含参考答案).北京:清华大学出版社,2006.雍

2、俊海.Java程序设计.北京:清华大学出版社,2004.,2023/11/7,5,第3章 面向对象程序设计,雍俊海(Jun-Hai Yong)清华大学软件学院School of Software,Tsinghua University,2023/11/7,6,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,7,面向对象程序设计整体介绍,面向对象程序设计(OOP)将数据(属性)和方法(行为或功能)封装到类(classes)中数据与

3、方法常常是紧密相关的对象(objects):类的实例对象或类本身三个基本特性:封装性、继承性和多态性,2023/11/7,8,比较,结构化程序设计对应的典型的计算机语言,例如:C面向操作(action)的函数(方法)是程序的基本单位面向对象程序设计对应的典型的计算机语言,例如:Java面向对象(object)的类(class)是程序的基本单位方法(函数)被封装在类中数据也常常被封装在类中,2023/11/7,9,类,类(class)本身也是一种对象类(class)同时也是实例对象的模板类(class)的基本组成:(成员)域和(成员)方法 每个对象:拥有内存存储成员域/方法静态的成员域/方法属于

4、类其它成员域/方法属于实例对象,2023/11/7,10,类的定义,类的定义格式如下:类修饰词 class 类名 extends 父类名 implements 接口名称列表 类体,2023/11/7,11,多个类组成的程序,很多Java程序需要多个类完成一项任务一个文件一般只含有一个类每个文件的长度一般不要太长最长一般不要超过2000行,2023/11/7,12,方法定义,与C+程序不同的是:每个方法都必须隶属于某个类方法定义的格式:方法修饰词 返回类型 方法名(方法的参数列表)方法体 返回类型:返回数据的数据类型除了构造方法,一般要求返回类型:要么为void,要么为某种数据类型int、byt

5、e、float或String最多只能返回一个值方法名:任何一个合法的标识符参数列表:用逗号(,)分隔开,2023/11/7,13,返回控制,如果没有值返回:return;/退出该方法或者遇到该方法的最后一个“”,则退出该方法如果有值返回:return 表达式;/退出该方法返回该表达式的值,2023/11/7,14,构造方法,构造方法在创建新的实例对象时起作用构造方法通常用来初始化实例对象,例如:初始化成员域或设置工作环境构造方法的特点:与类同名没有返回值可以含有多种构造方法(重载)但必须具有不同的参数列表,2023/11/7,15,默认的构造方法,如果没有显式地定义类的构造方法,则系统会为该类

6、定义一个默认的构造方法。该构造方法不含任何参数。这个默认的构造方法首先调用其父类的不含任何参数的构造方法,然后初始化新生成的实例的各个成员域变量默认值:基本数值类型:0;boolean:false;引用数据类型:null最好自己写构造方法一旦在类中定义了构造方法,系统就不会再创建这个默认的不含参数的构造方法。,2023/11/7,16,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,17,继承性,继承性 软件重用的一种方法根据已

7、有的类创建新的类采纳了旧的类的属性(域)及其行为(方法)增加了新的能力子类继承父类子类增加了新的成员域或新的成员方法有时可以理解成:(但不绝对!)子类对象是一种特殊的父类对象,2023/11/7,18,继承性的实现,采用关键字extendspublic class J_HelloApplet extends Applet/类J_HelloApplet结束,2023/11/7,19,关键字:instanceof,运算符:instanceof例如:if(p instanceof Circle)上面的条件为 true,当且仅当引用p所指向的对象是类Circle(或其子类)的实例对象,2023/11/

8、7,20,多重继承,在有些计算机语言中,允许一个类有多个直接父类。这种继承关系称为多重继承Java不支持多重继承Java 允许一个类有多个直接父接口(interface),2023/11/7,21,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,22,多态性,优点:代码重用简化设计、简化代码便于程序扩展,2023/11/7,23,多态性的种类,静态的多态性重载动态的多态性覆盖,2023/11/7,24,静态的多态性(重载),在编

9、译时就能够被识别针对的是同一个类内的同名方法例如:public int square(int x)return x*x;public double square(double x)return x*x;,2023/11/7,25,识别重载方法,识别标志:参数的个数、类型、数据类型的排列顺序返回值不能做为识别的标志,2023/11/7,26,动态多态性(覆盖),在程序运行时才被识别重写父类的方法要求相同的声明例如:public class J_HelloApplet extends JApplet public void paint(Graphics g)g.clearRect(0,0,getW

10、idth(),getHeight();/清除背景 g.drawString(小应用程序,您好!,10,20);/方法paint结束/类J_HelloApplet结束,2023/11/7,27,源程序:J_Teacher.Java,/文件名:J_Teacher.java;开发者:雍俊海class J_Employee public int m_workYear;/工作的年限 public J_Employee()m_workYear=1;/J_Employee构造方法结束 public void mb_printInfo()System.out.println(该职工的工作年限为+m_workY

11、ear);/方法mb_printInfo结束/类J_Employee结束,2023/11/7,28,public class J_Teacher extends J_Employee public int m_classHour;/授课的课时 public J_Teacher()m_classHour=96;/J_Teacher构造方法结束 public void mb_printInfo()System.out.println(该教师的工作年限为+m_workYear);System.out.println(该教师授课的课时为+m_classHour);/方法mb_printInfo结束 p

12、ublic static void main(String args)J_Employee a=new J_Employee();a.mb_printInfo();a=new J_Teacher();a.mb_printInfo();/方法main结束/类J_Teacher结束,源程序:J_Teacher.Java,2023/11/7,29,编译、运行&结果,2023/11/7,30,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/

13、7,31,包,可以将一组相关的类或接口封装在包(package)里,从而更好地管理已经开发的Java代码包含组织类与接口的目录结构方便程序重用,2023/11/7,32,Java 包,Java系统提供了很多已经写好的包数学计算、输入/输出、字符串操作尽量利用已有的包、避免重复工作使用包中类利用import 语句指定类的位置例如:import javax.swing.JApplet;,2023/11/7,33,包,包java.lang包java.util,2023/11/7,34,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、fi

14、nal和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,35,类成员的封装性,成员(域或方法)的访问控制方式:1)public2)private3)protected4)default(缺省方式),2023/11/7,36,成员的访问控制方式:public,则该成员可以被任何类中的方法访问表明对外开放的方式少量(或者没有)public 域部分 public 方法,2023/11/7,37,成员的访问控制方式:private,目的:隐藏具体的实现细节只有同一个类的成员方法才能访问私有成员域常常是private 采用 public“get”方法读取数据采

15、用 public“set”方法写数据,2023/11/7,38,成员的访问控制方式:protected,介于public 和private之间同一个包内的所有类的所有方法都能访问该成员如果不在同一个包内的类的方法要访问该成员,则该类必须是该成员所在的类的子类,2023/11/7,39,成员的访问控制方式:default(缺省方式),只有在同一个包内的类的方法才能访问该方法,2023/11/7,40,类成员封装性总结,2023/11/7,41,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final接口内部类变量作用域范围和参数传

16、递方式面向对象程序设计基本思想,2023/11/7,42,abstract,Java允许定义抽象(abstract)的类和方法抽象(abstract)的方法可以只提供方法的头部,但不提供实现的部分抽象(abstract)的方法只能是抽象(abstract)类中的方法例如:public abstract class J_Vehicle public abstract class J_Shape public abstract void fuel();public abstract void mb_draw();,2023/11/7,43,关键字:static,静态的(static)域和静态的(s

17、tatic)方法实际上隶属于类对象 静态的(static)域示例:System.out静态的(static)方法示例:main()示例:Math.sqrt()public static double sqrt(double a),2023/11/7,44,关键字:final,可以修饰的对象:final 域final 方法final 类,2023/11/7,45,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,46,接口(inte

18、rface),接口(interface)就象是一种特殊的类成员方法:abstract成员域:final和static接口(interface)中所有的方法和域必须都是 public的每个接口一般定义在一个.java 文件中,2023/11/7,47,示例,例1:通过接口定义一些常量public interface J_Constantspublic static final int ONE=1;public static final int TWO=2;public static final int THREE=3;/接口J_Constants结束例2:interface J_Shape pu

19、blic abstract void mb_draw(Graphics2D g);/接口J_Shape结束,2023/11/7,48,注意事项,接口中成员方法的默认方式是 public 和 abstract接口中成员域的默认方式是public、static和final,2023/11/7,49,优点,一个类可以继承多个接口例如:,public class A extends B implements C,D,2023/11/7,50,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数

20、传递方式面向对象程序设计基本思想,2023/11/7,51,内部类,定义在其它类内部的类称为内部类内部类有些类似于类的成员域或成员方法,2023/11/7,52,匿名内部类,没有类名常常用在图形用户界面设计(GUI)中,进行各种事件处理例如:鼠标事件、按钮事件和键盘事件等,2023/11/7,53,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,54,变量的作用域范围,作用域范围:程序中能够使用该变量(域与局部变量)的范围分类:

21、类作用域范围和块作用域范围,2023/11/7,55,类作用域范围,从类定义的第一个“”开始,到 最后一个“”结束超出类的范围,类的成员方法不能直接通过它的名称进行访问例如:成员域,2023/11/7,56,块作用域范围,从变量声明之处,到该块的最后一个“”例如:局部变量与成员方法的参数,2023/11/7,57,值传递示例,/编写一个程序用来说明/Java方法调用过程中/值传递方式/,2023/11/7,58,源程序,/文件名:J_Primitive.java;开发者:雍俊海public class J_Primitive public static void mb_method(int a

22、)System.out.println(在a+之前方法参数a=+a);a+;System.out.println(在a+之后方法参数a=+a);/方法mb_method结束 public static void main(String args)int i=0;System.out.println(在方法调用之前变量i=+i);mb_method(i);System.out.println(在方法调用之后变量i=+i);/方法main结束/类J_Primitive结束,2023/11/7,59,编译、运行&结果,编译命令为:javac J_Primitive.java执行命令为:java J_

23、Primitive最后执行的结果为:在方法调用之前变量i=0在a+之前方法参数a=0在a+之后方法参数a=1在方法调用之后变量i=0,2023/11/7,60,本章总体纲要,类、域、方法和实例对象继承性多态性包(package)封装性关键字abstract、static、final和this接口内部类变量作用域范围和参数传递方式面向对象程序设计基本思想,2023/11/7,61,示例,/编写一个程序用来说明/求解矩形和圆面积/,2023/11/7,62,按对象进行分解,编写文件J_Shape.java,实现接口J_Shape编写文件J_Circle.java,实现类J_Circle继承自接口J

24、_Shape编写文件J_Rectangle.java,实现类J_Rectangle继承自接口J_Shape编写文件J_Area.java,实现类J_Area计算矩形和圆面积利用类J_Circle和类J_Rectangle,2023/11/7,63,源程序:J_Shape.java,/文件名:J_Shape.java;开发者:雍俊海public interface J_Shape/计算并返回形状的面积 public abstract double mb_getArea();/接口J_Shape结束,2023/11/7,64,源程序:J_Circle.java,/文件名:J_Circle.java

25、;开发者:雍俊海(待续)public class J_Circle implements J_Shape public double m_x,m_y;/圆心坐标 public double m_radius;/半径 public J_Circle(double r)m_x=0;m_y=0;m_radius=r;/J_Circle构造方法结束,2023/11/7,65,源程序:J_Circle.java,/文件名:J_Circle.java;开发者:雍俊海(续)public J_Circle(double x,double y,double r)m_x=x;m_y=y;m_radius=r;/J

26、_Circle构造方法结束/计算并返回形状的面积 public double mb_getArea()return(Math.PI*m_radius*m_radius);/方法mb_getArea结束/类J_Circle结束,2023/11/7,66,源程序:J_Rectangle.java,/文件名:J_Rectangle.java;开发者:雍俊海(待续)public class J_Rectangle implements J_Shape public double m_minX,m_minY;/第一个角点坐标 public double m_maxX,m_maxY;/另一个角点坐标 pu

27、blic J_Rectangle(double x1,double y1,double x2,double y2)if(x1x2)m_minX=x1;m_maxX=x2;else m_minX=x2;m_maxX=x1;/if-else结构结束,2023/11/7,67,源程序:J_Rectangle.java,/文件名:J_Rectangle.java;开发者:雍俊海(续)if(y1y2)m_minY=y1;m_maxY=y2;else m_minY=y2;m_maxY=y1;/if-else结构结束/J_Rectangle构造方法结束/计算并返回形状的面积 public double mb

28、_getArea()return(m_maxY-m_minY)*(m_maxX-m_minX);/方法mb_getArea结束/类J_Rectangle结束,2023/11/7,68,源程序:J_Area.java,/文件名:J_Area.java;开发者:雍俊海public class J_Area public static void main(String args)J_Shape a=new J_Circle(5);System.out.println(半径为5的圆的面积是+a.mb_getArea();a=new J_Rectangle(0,0,3,4);System.out.pri

29、ntln(给定的矩形面积是+a.mb_getArea();/方法main结束/类J_Area结束,2023/11/7,69,作业,教材习题3.4教材习题3.9,2023/11/7,70,本课件使用要求,使用本课件,必须注明引用(具体见下一个幻灯片)书及课件均可能出现一些错误和缺陷,恳切希望广大读者特别是讲授此课程的老师批评指正,2023/11/7,71,引用声明,本课件来源于(或参考了)下面的书及其课件:雍俊海.Java程序设计教程.北京:清华大学出版社,2007.,2023/11/7,72,免责声明,请合法使用课件,其用途应当合法有益而且不应对任何人造成任何伤害或损失同时请注意教材作者及出版

30、社没有对本课件作出任何承诺与保证,2023/11/7,73,参考文献,本课件的参考文献与下面书的参考文献相同雍俊海.Java程序设计教程.北京:清华大学出版社,2007.雍俊海.Java程序设计习题集(含参考答案).北京:清华大学出版社,2006.雍俊海.Java程序设计.北京:清华大学出版社,2004.,2023/11/7,74,雍俊海编写过的教材和教参,雍俊海.计算机动画算法与编程基础.北京:清华大学出版社.2008.雍俊海.Java程序设计.北京:清华大学出版社.2008.雍俊海.Java程序设计教程(第2版).北京:清华大学出版社.2007.雍俊海.Java程序设计习题集(含参考答案)

31、.北京:清华大学出版社,2006.雍俊海.Java程序设计.北京:清华大学出版社.2004.,2023/11/7,75,雍俊海编写过的教材和教参,雍俊海.计算机动画算法与编程基础.北京:清华大学出版社.2008.,2023/11/7,76,雍俊海编写过的教材和教参,雍俊海.Java程序设计.北京:清华大学出版社,2008.,2023/11/7,77,雍俊海编写过的教材和教参,雍俊海.Java程序设计教程.清华大学出版社,2007.,普通高等教育精品教材,普通高等教育“十一五”国家级规划教材,2023/11/7,78,雍俊海编写过的教材和教参,雍俊海.Java程序设计习题集(含参考答案).清华大学出版社,2006.,2023/11/7,79,雍俊海编写过的教材和教参,雍俊海.JAVA程序设计.北京:清华大学出版社.2004.,2023/11/7,80,谢谢,请多指教,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号