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

下载本文档

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

文档简介

第4讲 Java面向对象编程技术,授课课时:8课时(360分钟) 主编:刘志成,2,主要内容,本课目标 新课引入与项目展示 案例1 编写描述学生的Java类 案例2 编写描述大学生的Java类 案例3 方法重载与方法重写 案例4 定义形状 案例5 实现电视机遥控器 案例6 读取队列元素 案例7 操作字符串 课堂实践 巩固与提高,3,本课目标,4,教学情境引入新课,熟练掌握类的定义,对象的创建及对象之间的交互,子类和抽象类的定义及多态的实现与使用。,工作任务,项目展示,5,教师示范与讲解1,任务一:编写描述学生的Java类,案例分析,6,面向对象的基本概念,1对象 对象(Object)就是客观存在的任何事物。 2类 类(class)是对象的模板。即类是对一组有相同静态特性和相同动态行为的对象的抽象,一个类所包含的属性和方法描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。,7,面向对象的基本概念,3接口 如果我们把客观世界看成由不同的系统(或类)组成,这些系统(或类)之间需要通过一个公共的部件进行交流,我们把这个公共的部件称为接口(Interface)。 4消息 消息就是对象之间进行通信的一种规格说明,对象之间进行交互作用和通信的工具。,8,面向对象的基本特性,1封装性 封装是一种信息隐蔽技术,它体现于类的说明中,是对象的重要特性。 封装的目的在于把对象的设计者和对象的使用者分开,使用者不需要知道行为实现的细节,只需用设计者提供的消息来访问该对象。 在Java语言中,类是封装的最基本单位。 封装有助于提高类和系统的安全性。,9,面向对象的基本特性,2继承性 继承是类不同抽象级别之间的关系,是子类自动共享父类数据和方法的机制。 3多态性 对象根据所接收的消息产生行为,同一消息为不同的对象接收时可产生完全不同的行动,这种现象称为多态性。 多态允许对任意指定的对象自动地使用正确的方法,并通过在程序运行过程中将对象与恰当的方法进行动态绑定来实现。,10,类的定义,Java中的类的定义包括类声明和类体两部分内容。 类声明的格式如下: publicabstractfinal class 类名 extends 父类名 implements 接口名表 类体的通用格式如下: publicabstractfinal class 类名 extends 父类名 implements 接口名表 成员域定义部分; 方法定义部分; ,11,课堂演示-编写描述学生的Java类,【案例4-1】判断指定数的奇偶性 【案例学习目标】理解面向对象的基本概念,掌握Java语言中类的基本格式,能够简单实现对客观事物到Java类的抽象。 【案例知识要点】类的含义、类的定义、Java类的声明方法、Java类体的定义方法。 【案例完成步骤】 学生对象分析 类的定义,12,课堂演示-编写描述学生的Java类,学生对象分析,13,课堂演示-编写描述学生的Java类,类的定义 public class Student public static int iCounter=0; String sName; boolean bGender=false; /false代表“女“ int iAge; double dHeight; /单位为厘米 double dWeight; /单位为公斤 public static void getCounter() System.out.println(“学生总数:“+ +iCounter); ,14,课堂演示-编写描述学生的Java类,public void getInfo() System.out.print(“姓名:“+sName+“t“); System.out.print(“性别:“+bGender+“t“); System.out.print(“年龄:“+iAge+“岁t“); System.out.print(“身高:“+dHeight+“厘米t“); System.out.println(“体重:“+dWeight+“公斤“); public void setInfo(String n,boolean g,int a,double h,double w) sName=n; bGender=g; iAge=a; dHeight=h; dWeight=w; ,15,学生模仿1,16,教师示范与讲解2,17,成员变量定义,成员变量描述了类的静态特性。 类的静态特性包括两部分:类的特性和对象的特性信息。对应的Java也将成员变量分为两种:类变量和实例变量。 在变量定义时,可同时给其赋初值,将其初始化 类的成员变量定义的一般格式如下: 存取修饰符 final transient static volatile 类型 变量名 = 值 或表达式,变量名 = 值或表达式;,18,成员方法定义,方法是一个包含一条或多条语句的代码块,用来完成一个相对独立的功能 方法有自己的名称以及可以重复使用的变量 与类成员变量一样,方法也分为类方法(也称为静态方法)和实例方法两种 类的成员方法定义的一般格式如下: 存取修饰符 final staticabstractnativesynchronized 方法返回类型 方法名( 形式参数表) throws 异常表 可执行代码; ,19,构造方法,构造方法的主要用途有两个:一是通知Java虚拟机创建类的对象,二是对创建的对象进行初始化 如果在程序中没有显式的定义类的构造方法,Java编译器将自动提供一个构造方法,称为默认构造方法 可以在【案例4-1】中,添加一个构造方法: public Student() iAge=36; dHeight=170; dWeight=65; ,20,创建对象,1创建对象的步骤 在已经定义好的类的基础上,创建对象的过程分为如下3步: (1)创建对象引用变量; (2)创建类的实例对象; (3)将对象的引用赋值给对象引用变量。,21,创建对象,2new运算符 通过new运算符创建对象时,Java虚拟机将在堆中开辟一个内存空间,用于存放对象的实例变量,并根据指定的构造方法和类的定义初始化这些实例变量。new运算符的一般格式为: 对象引用变量 new 对象构造方法; 3调用对象的成员 对象的成员(实例变量与实例方法)的调用采用“.”运算符,引用的一般格式为: 对象引用变量.类的成员,22,类的继承,在Java中,从一个现有类的基础上定义新的类的过程称为派生。 新定义的类称为派生类,也称为直接子类。 基础类称为父类或超类。这种一个类派生出另一个类的关系即为继承关系,一个派生类将继承其父类的所有特性和操作。 如果要创建一个继承父类的子类,只需在类的声明中通过extends关键字指定要继承的类名就可以。,23,课堂演示-编写描述大学生的Java类,【案例4-2】编写描述大学生的Java类 【案例学习目标】理解继承的基本思想,理解父类和子类的关系,能在父类的基础上创建子类 【案例知识要点】父类和子类的概念、子类的实现、extends关键字 【案例完成步骤】 编写程序 编译并运行程序,24,课堂演示-编写描述大学生的Java类,编写程序 public class College extends Student private String sMajor; public void getMajor() System.out.println(“专业:“+sMajor);/调用子类的实例变量 System.out.println(“身高:“+dHeight);/引用父类的实例变量 public static void main(String args) College wangym; wangym=new College(); wangym.getInfo();/调用父类的实例方法 wangym.getMajor();/调用子类的实例方法 ,25,课堂演示-编写描述大学生的Java类,运行结果,26,学生模仿2,27,教师示范与讲解3,任务一:方法重载与方法重写,案例分析,28,this和super,this代表当前对象本身。 通过this变量不仅可以引用当前对象的实例变量,也可引用当前对象的实例方法;但由于类变量与类方法不属于具体的类对象,因此不能通过this变量引用类变量和类方法,在类方法中也不能使用this变量。 在引用实例变量时,使用this变量是一种很好的习惯,它能使程序更加清晰,且不容易出错。 super代表当前类的父类。通过super可以调用父类的构造方法和父类的成员(成员变量和成员方法)。,29,方法重载与方法重写,方法重载指类的同名方法在向其传递不同的参数时可以有不同的动作,实现不同的功能 子类从父类中继承方法时,需要修改父类中定义的方法(即只修改方法体,方法的参数类型、个数、顺序以及返回值保持相同),这就是方法的重写,30,课堂演示方法重载与方法重写,【案例4-3】方法重载与方法重写 【案例学习目标】理解方法重载的含义和应用场合,理解方法重写的含义和应用场合,掌握实现方法重载的方法,掌握实现方法重写的方法,能在实际应用中合理选择方法重载或方法重写。 【案例知识要点】方法重载的含义、方法重写的含义、方法重载的方法、方法重写的方法。 【案例完成步骤】 编写程序 编译并运行程序,31,课堂演示-方法重载与方法重写,编写方法重载的程序 public class OverLoadDemo void purchase() System.out.println(“买菜“); void purchase(String what) System.out.println(“买“+what); void purchase(String what,int number) System.out.println(“买“+number+“斤“+what); void purchase(String what,String where) System.out.println(“到“+where+“买“+what); ,32,课堂演示-方法重载与方法重写,void purchase(String what,int number,String where) System.out.println(“到“+where+“买“+number+“斤“+what); void purchase(String what,int number,String where,String when) System.out.println(when+“到“+where+“买“+number+“斤“+what); public static void main(String args) OverLoadDemo old=new OverLoadDemo(); old.purchase(); old.purchase(“大米“); old.purchase(“大米“,100); old.purchase(“大米“,“步步高超市“); old.purchase(“大米“,100,“步步高超市“); old.purchase(“大米“,100,“步步高超市“,“下午“); ,33,课堂演示-方法重载与方法重写,方法重载运行结果,34,课堂演示-方法重载与方法重写,编写方法重写的程序 class Stu String sName; void display(String name) System.out.println(“我是一名学生,我的名字是:“+name); class CollegeStu extends Stu String sMajor; void display(String name) System.out.println(“-“); System.out.println(“我是一名大学生,我的名字是:“+name); sMajor=“计算机“; System.out.println(“我学习的专业是:“+sMajor); ,35,课堂演示-方法重载与方法重写,class MiddleStu extends Stu String sSubject; void display(String name) System.out.println(“-“); System.out.println(“我是一名中学生,我的名字是:“+name); sSubject=“理科“; System.out.println(“我学习的科目是:“+sSubject); ,36,课堂演示-方法重载与方法重写,public class OverrideDemo public static void main(String args) Stu stu=new Stu(); CollegeStu cstu=new CollegeStu(); MiddleStu mstu=new MiddleStu(); Stu s; s=stu; s.display(“刘津“); s=cstu; s.display(“王咏梅“); s=mstu; s.display(“刘志成“); ,37,课堂演示-方法重载与方法重写,方法重写运行结果,38,学生模仿3,39,教师示范与讲解4,40,抽象类与抽象方法,在面向对象分析设计时,可将一些实体作高度抽象定义成抽象类。抽象类没有任何对象,只可作为一个模板用于创建子类,以及为面向对象提供更灵活的多态机制 抽象类定义的一般格式如下: public abstract class 类名 extends 父类名 implements 接口名表 方法体; ,41,抽象类与抽象方法,抽象类的声明,必须在class关键字之前添加abstract关键字。 抽象类与其他类一样,可继承于其他类,也可实现接口。但定义抽象类的主要目的就是为了创建子类,因此abstract类不可以是final类。 抽象类中可以不包含抽象方法,但包含抽象方法的类必须是抽象类。 抽象方法声明的一般格式如下: 存取修饰符 abstract 方法返回类型 方法名( 形式参数表) throws 异常表;,42,Final修饰符,出于保密或其他设计上的原因,希望类或类中成员变量、成员方法不被修改或重写,可以通过Java提供的final修饰符来实现 在类定义时,可使用final修饰符使类不被继承 在定义成员变量时,可通过final修饰符定义常量 在定义方法时,可使用final修饰符避免方法被子类重写,43,课堂演示-定义形状,【案例4-4】定义形状 【案例学习目标】了解抽象类的定义方法,掌握由抽象类得到具体类的方法,能根据实际应用编写抽象类和具体类 【案例知识要点】抽象类的定义、抽象类和具体类的关系、abstract关键字 【案例完成步骤】 编写程序 编译并运行程序,44,课堂演示-定义形状,编写程序 abstract class Shape public abstract void getArea(); class Circle extends Shape final double PI=3.1415926; double dRadius; public void getArea() System.out.println(“圆的面积为:“+PI*dRadius*dRadius); public Circle(double r) this.dRadius=r; ,45,课堂演示-定义形状,class Rectangle extends Shape double dLength; double dWidth; public void getArea() System.out.println(“矩形的面积为:“+dLength*dWidth); public Rectangle(double l,double w) this.dLength=l; this.dWidth=w; public class AbstractDemo public static void main(String args) Circle cc=new Circle(5.6); cc.getArea(); Rectangle rt=new Rectangle(8,6); rt.getArea(); ,46,课堂演示-定义形状,运行结果,47,学生模仿4,48,教师示范与讲解5,49,接口定义,接口被描述为一组方法声明和常量的集合 接口只定义一组方法协议(或称标准),但没有作任何具体实现。接口的定义与类的定义相似,其一般格式为: public interface 接口名 extends 父辈接口列表 常量定义 方法声明 ,50,实现接口,实现接口的定义格式如下: publicabstractfinal class 类名 extends 父类名 implements 接口名表 /接口体内容1 /接口方法实现 /接口体内容2 与普通类的定义不同,接口实现必须包含“implements 接口名表”部分 在实现类中,一般必须重写接口中声明的所有方法。 重写方法的名称、返回值、修饰符必须与接口中声明的方法一致。,51,课堂演示-实现电视机遥控器,【案例4-5】实现电视机遥控器 【案例学习目标】进一步理解继承和多继承的含义,掌握接口声明的方法,掌握接口体定义的方法,会根据实际应用编写接口 【案例知识要点】接口声明、接口体定义、使用接口、interface关键字 【案例完成步骤】 编写接口程序 编写实现接口的程序 编写测试接口的主类 运行程序,52,课堂演示-实现电视机遥控器,编写接口程序 interface IRemoteCtrl int VOLUME_MIN = 0; int VOLUME_MAX = 100; boolean powerOnOff(boolean b); /电源开关 int volumeUp(int increment); /声音放大 int volumeDown(int decrement); /声音减小 void mute();/静音 ,53,课堂演示-实现电视机遥控器,编写实现接口的程序(见书本) 编写测试接口的主类 public class TestTvCtrl public static void main(String args) TVRemoteCtrl tv=new TVRemoteCtrl(“海尔 H600“); tv.powerOnOff(true); /tv.powerOnOff(false); tv.setChannel(45); tv.channelDown(); tv.mute(); tv.volumeUp(2); tv.volumeUp(3); ,54,课堂演示-实现电视机遥控器,运行结果,55,学生模仿5,56,教师示范与讲解6,57,定义包,在Java语言中,与客观世界中系统相对应的概念称为包(Package)。 包是一种分组机制,设计者可将一组高内聚、低耦合、关联性较强的模型元素(可以是类、接口、包)组织在一起,形成一个更高层次的单元 包由一组类和接口组成。它是管理大型名字空间,避免名字冲突的工具。每一个类和接口的名字都包含在某个包中。 使用包的作用有两个:一是划分类名空间,二是控制类之间的访问。 定义包的一般格式如下: package packageName;,58,引入包,在一个类中,如果要使用其他包中的类和接口则用import关键词来标明来自其他包中的类。 Java提供import关键词来引用包,指定包的名字,包括路径名和类名,用“*”匹配符可以调入多个类。 通常一个类只能引用与它在同一个包中的类,如果需要使用其他包中的public类,则可以使用如下的几种方法。 在要使用的类前加包名 用import关键字加载需要使用的类 用import关键字加载整个包 设置CLASSPATH环境变量,59,Java常用类库,60,数组与字符串,数组是一种常用的数据结构,相同数据类型的元素按一定顺序排列就构成了数组。 数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 数组有一个成员变量length来说明数组元素的个数。 创建一个空数组。 int list=new int5; 用初始数值填充数组。 String names=“liujin“,“wangym“,“Liuzc“;,61,一维数组,声明一个数组其实就是要确定数组名、数组的维数和数组元素的数据类型。声明数组的语法格式有两种: 数组元素类型 数组名;或 数组元素类型 数组名; 声明数组后,要想使用数组需要为它开辟内存空间,即创建数组空间。创建数组空间的语法格式为: 数组名=new 数组元素类型数组元素的个数; 在声明数组时“”中不允许指定数组元素的个数,如int iSno6将导致语法错误。 正确区分“数组的第5个元素”和“数组元素5”很重要,因为数组下标从0开始,“数组的第5个元素”的下标是4,而“数组元素5”的下标是5,实际是数组的第6个元素 当数组初始化后就可通过数组名与下标来引用数组中的每一个元素。一维数组元素的引用格式如下: 数组名数组下标,62,二维数组,二维数组的声明与一维数组相似,只是需要给出两对方括号。格式如下 : 类型标识符 数组名;或 类型标识符 数组名; 在初始化二维数组时,可以只指定数组的行数而不给出数组的列数,每一行的长度由二维数组引用时决定,但不能只指定列数而不指定行数 不指定行数只指定列数是错误的,63,课堂演示-读取队列元素,【案例4-6】读取队列元素 【案例学习目标】了解数组的含义,掌握数组的定义方法,掌握数组的赋值方法,掌握数组元素的引用方法,在实际编程中能够合理地使用数组 【案例知识要点】一维数组的定义、一维数组的赋值、一维数组元素的引用 【案例完成步骤】 编写程序 编译并运行程序,64,课堂演示-读取队列元素,编写程序 public class Queue public static void main(String args) int i; int a=new int5; for(i=0;i=0;i-) System.out.println(“a“+i+“=“+ai); ,65,课堂演示-读取队列元素,运行结果,66,学生模仿6,67,教师示范与讲解7,68,String类,字符串是程序中的一个通用且重要的信息类型,在程序中经常要把各种各样的信息以字符串的形式传递、通信和输出显示,而Java为字符串操作提供了许多特殊的支持。,69,StringBuffer类,StringBuffer是字符串类String的对等类, 提供了大量的字符串功能。 String表示定长、不可变的字符序列,而StringBuffer表示变长的和可修改的字符序列,可用于动态创建和操作动态字符串信息。 StringBuffer支持字符或子字符串的插入或追加的操作,并可针对这些字符或子字符串的添加而自动地增加空间。,70,课堂演示-操作字符串,【案例4-7】操作字符串 【案例学习目标】了解String对象和StringBuffer对象的异同,掌握String对象的构造方法,掌握StringBuffer对象的构造方法,在实际开发中能够合理使用String对象或StringBuffer对象提供的相关方法完成字符串的基本操作 【案例知识要点】String对象的构造方法、String对象的常用方法、StringBuffer对象的构造方法、StringBuffer对象的常用方法 【案例完成步骤】 编写程序 编译并运行程序,71,课堂演示-操作字符串,编写程序 publi

温馨提示

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

评论

0/150

提交评论