《JAVA面向对象编程.ppt》由会员分享,可在线阅读,更多相关《JAVA面向对象编程.ppt(58页珍藏版)》请在三一办公上搜索。
1、第三章,Java面向对象编程,2,回顾,一、Java数据类型Java 中的数据类型分为两个类别:原始数据类型(基本数据类型)、引用数据类型(复合数据类型)数据转换有两种类型:自动类型转换和强制类型转换二、Java标识符命名检查下面这些是否是合法的变量名变量命名的几点建议(知名取义、类名、静态属性,属性、方法)三、Java运算符(有哪些,运算规则)四、Java 支持控制语句编程结构:if,switch,for,while,do-while,3,本章目标,掌握类和对象的特征(重点)理解抽象和封装(理解)理解对象与类之间的关系及差异(难点)掌握包的创建和导入(重点)理解继承及其特点(理解)运用JAV
2、A程序实现继承(重点)理解多态及其特点设计(理解)运用JAVA程序实现多态(理解)掌握访问修饰符和方法修饰符(难点),4,程序发展阶段,面向对象是一个比较先进的设计思路,在之前实际上有种开发设计,称为面向过程,也是程序发展的主要的两个阶段。其区别在于:用一个例子来解释,如一个木匠要做一个盒子,那么做这个盒子的出发点会有两种方式:面向对象:先想好要做的盒子,之后再去找相应的工具去做。面向过程:不去想要做什么样的盒子,随意取用工具。面向过程:专著于解决问题面向对象要经过完整的分析、设计之后才可以进行开发:,5,面向对象与面向过程的区别,面向过程注重于算法,通过函数把这些步骤一步一步实现,使用的时候
3、一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向过程 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展 面向对象 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点:性能比面向过程低,6,面向对象的程序开发实际上分三种 OOA(面向对象分析)是在一个系统的开发
4、过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。OOD(面向对象设计)是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。面向对象设计(OOD)是一种软件设计方法,是一种工程化规范。OOP(面向对象编程)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。,7,面向对象编程,8,面向对象三个特征,1.封装:对外部是不可见的,它
5、可以保护程序中的某些内容,对外部提供某些接口。2.继承:是用来扩展功能的,最低都是大于或等于父类的相关功能。3.多态:指一个方法只能有一个名称,但可以有多种状态,即程序中可以定义多个同名的方法。,9,oop的核心,oop的核心是对象对象表示现实世界的一个实体,它为不同的目的而存在。对象具有两个用途:1.有助于了解现实世界 2.为计算机应用程序提供了应用基础,10,万事万物皆对象,世界是由什么组成的?,什么是对象?,11,身边的对象,布兰尼,朱丽叶,顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品,姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印账单,12,对象的特征属性,属
6、性对象具有的各种特征每个对象的每个属性都拥有特定值例如:布兰尼和朱丽叶的体重不一样,60kg,布兰尼,属性,35岁,13,对象的特征方法,方法对象执行的操作,打单,收银,方法,刷卡,14,对象的概念,“对象是存在的具体实体,具有明确定义的状态和行为。”,15,描述下列对象?,列出尼古拉斯凯奇驾驶的这辆法拉利F360 Spider的属性和方法列出小狗对象的属性和方法,属性:品牌:法拉利 型号:F360 Spider 颜色:黄色 价格:380万元方法:发动 停止 加速,属性:颜色:白色方法:叫 跑 吃,16,小结1,说一说教室里的对象描述他们的属性和方法,颜色:黑色品牌:BENQ投影,姓名:张三年
7、龄:20学习,类型:白炽灯开关变亮变暗,材制:木质支撑物品,17,什么是“类”,抽取出下列对象的属性和方法的共同特征,轿车,顾客,18,类,顾客类轿车类,类是模子,确定对象将会拥有的特征(属性)和行为(方法),类是对象的类型不同于int类型:具有方法,各种口味的球状冰淇淋,球状冰淇淋模子,19,类的概念,类以共同特性和操作定义实体类是用于组合各个对象所共有操作和属性的一种机制,形状类,动物类,汽车类,类的示例,“类是具有相同属性和行为的一组对象的集合”,20,练习,哪些是类?哪些是对象?学校 大学 四川文理学院,21,小结2,类和对象有什么区别呢?类是抽象的概念,仅仅是模板,比如说:“人”对象
8、是一个你能够看得到、摸得着的具体实体,比如:“小布什”,小布什,普京,克林顿,22,小结,类是概念模型,定义对象的所 有特性和所需 的操作,对象是真实的模型,类定义实体,对象是实际的实体,23,Java 是面向对象的语言,所有Java程序都以类class为组织单元关键字class定义自定义的数据类型,public class HelloAccp public static void main(String args)System.out.println(使用Java语言理解程序逻辑);,24,Java类模板,类将现实世界中的概念模拟到计算机程序中,public class 类名/定义属性部分
9、属性1的类型 属性1;属性2的类型 属性2;属性n的类型 属性n;/定义方法部分 方法1;方法2;方法m;,25,属性,事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享,住址,姓名,属性,年龄,“在类中表示对象或实体拥有的特性时称为属性”,26,方法,“对象执行的操作称为方法。”,27,方法的示例,缝衣服的步骤,量尺寸,得到工具,缝衣服,方法,缝制衣服,裁缝,28,常见错误,public class.Book String bookName;String authorName;int pageNum;boolean isAvailable;,类命名规则:1
10、、不能使用Java关键字2、首字母可以为字母,也可以是“_”或“$”(建议不要这样)3、不能包含空格或“.”号,代码错误,29,以“人”类为例:演示,30,类和对象的示例,收银员,系统管理员,仓库管理员,促销员,采购经理,31,抽象,处理事物复杂性的方法,只关注事物的重要细节,而忽略事物的次要细节。,32,抽象:去除对象中与主旨无关的次要部分,而 仅仅抽取出与研究有关的内容(数据抽象)抽象有两类:一类是过程抽象,另一类是数据抽象。过程抽象将整个系统的功能划分为若干部分,强调功能完成的过程和步骤数据抽象把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象
11、数据类型。每个抽象数据类型包含了数据,也包含了针对这些数据的授权操作。面向对象的软件开发采用数据抽象的方法来构建程序的类、对象和方法。,33,抽象的示例,递交报告,速递公司,在回执确认上签名,返回回执确认,史密斯大夫,将报告送往目的地,包装并密封报告,34,数据抽象,抽取出关键数据抽取出属性和方法,“根据具体的应用抽取出类的相关关属性和操作。”,35,数据抽象的示例,属性,方法,getName(),getStudentNO(),getSeatNumber(),36,在 Java 中实现类,类的修饰字:public abstract|final 缺省方式为 friendly,类的修饰字 clas
12、s 类名称 extends 父类名称implements 接口名称列表 变量定义及初始化;方法定义及方法体;,37,一个完整的java源程序应该包括下列部分:,package语句;/该部分至多只有一句,必须放在源程序的第一句import语句;/*该部分可以有若干import语句或者没有,必须放在所有的类定义之前*/public classDefinition;/公共类定义部分,至多只有一个公共类的定义,java语言规定该java源程序的文件名必须与该公共类名完全一致classDefinition;/类定义部分,可以有0个或者多个类定义interfaceDefinition;/接口定义部分,可以
13、有0个或者多个接口定义,38,例如一个java源程序可以是如下结构,该源程序命名为HelloWorldApp.java:package javawork.helloworld;/*把编译生成的所有.class文件放到包javawork.helloworld中*/import java.awt.*;/告诉编译器本程序中用到系统的AWT包import javawork.newcentury;/*告诉编译器本程序中用到用户自定义的包javawork.newcentury*/public class HelloWorldApp./*公共类HelloWorldApp的定义,名字与文件名相同*/class
14、 TheFirstClass./第一个普通类TheFirstClass的定义class TheSecondClass./第二个普通类TheSecondClass的定义./其它普通类的定义interface TheFirstInterface./*第一个接口TheFirstInterface的定义*/./其它接口定义,39,定义类和创建对象,类的命名规则:不能为 Java 中的关键字不能包含空格或点号“.”可以下划线“_”、字母或“$”符号开头,class Book String bookName;String authorName;int nopages;boolean available;,
15、40,创建对象,对象(实例instance):以类为模板创建的 具体实例(实际个体)创建某个类的具体对象(类似变量声明)类名 欲创建的对象名new 类名构造函数(参数表);例如:String s=new String(“Hello!”);声明成员变量(member)的语法 修饰符 数据类型 变量名;引用方式:对象名.变量名,41,类中的方法 6-1,方法的名称,参数列表,方法的主体,方法返回的对象类型或原始类型,42,类中的方法 6-2,语法(,)其中,是方法返回值的数据类型 是用户自定义的方法名称方法的参数列表是一组变量声明。,43,类中的方法 6-3,不能为 Java 中的关键字,不能包含
16、空格或点号“.”,可以下划线“_”、字母或“$”符号开头,方法的命名规则:,44,类中的方法 6-4,class Book String bookName;String authorName;int nopages;boolean available;void isAvailable()if(available=true)System.out.println(有这本书);.,45,类中的方法 6-5,实例方法可使用圆点符号来访问方法被调用的对象在圆点左边,而方法的名称在圆点右边例如:Obj.isAvailable();,46,类中的方法 6-6,class Book String bookNa
17、me;String authorName;int nopages;boolean available;static void isAvailable()if(available=true)System.out.println(“有这本书);Book objBook=new Book();objBook.isAvailable();.,47,this 关键字,用于任何实例方法内,指向当前对象this 的值指向对其调用当前方法的对象 this 关键字可在需要当前类类型的对象引用时使用,48,this 关键字的示例,class Pixel int x;int y;void init(int x,in
18、t y)this.x=x;this.y=y;public static void main(String args)Pixel p=new Pixel();p.init(4,3);,此程序初始化 x=4 和 y=3,49,构造方法3-1,问题的提出Java试图在每个对象一诞生时,就给它一确定的状态,但有时这种系统的缺省初值不合适;所以在创建一个新对象时,需用构造方法完成合法的初始化,使类内成员的初始化工作不依赖于外界完成。这个方法就是构造函数,构造函数是与类同名的方法,创建对象的语句用 new算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。,50,构造方法3-2,构造函数是
19、类的一种特殊方法,它的特殊性主要体现在如下的几个方面:(1)构造函数的方法名与类名相同。(2)构造函数没有返回类型。(3)构造函数的主要作用是完成对类对象的初始化工作。(4)构造函数一般不能由编程人员显式直接调用。(5)在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。,51,构造方法3-3,每当创建给定类的实例时就调用的方法与类同名,但没有返回类型Java 为对象分配内存,初始化实例变量并调用构造方法两种构造方法参数化构造方法隐式构造方法,52,参数化构造方法的示例,class Sdate int month;int day;int year;Sdate(int m,i
20、nt d,int y)month=m;day=d;year=y;System.out.println(“日期是+m+/+d+/+y+.);public static void main(String args)Sdate S1,S2;S1=new Sdate(11,27,1969);S2=new Sdate(3,3,1973);,53,隐式构造方法的示例,class Sdate int month=11;int day=27;int year=1969;public static void main(String args)Sdate S1;S1=new Sdate();,54,示例的构造方法
21、,演示:示例 1,public static void main(String args)Book objBook=new Book(CoreJava,Albert,45,true);User objUser=new User();objUser.getBookStatus(objBook);,Book(String book,String author,int pages,boolean status)bookName=book;authorName=author;nopages=pages;available=status;,void getBookStatus(Book objBook)
22、objBook.isAvailable();,55,包,包允许将类组合成较小的单元(类似文件夹),使其易于找到和使用相应的类文件有助于避免命名冲突。在使用许多类时,类和方法的名称很难决定。有时需要使用与其他类相同的名称。包基本上隐藏了类并避免了名称上的冲突包允许在更广的范围内保护类、数据和方法,可以在包内定义类,而在包外的代码不能访问该类,“包将类名空间划分为更加容易管理的块,包既是命名机制也是可见度控制机制”,56,创建包,package mypackage;public class Calculate public double volume(double height,double width,double depth),57,导入包,import mypackage.Calculate;public class PackageDemo public static void main(String args)Calculate calc=new Calculate();,58,总结,对象由状态和行为组成 类是具有相同属性和行为的一组对象的集合 封装是隐藏对象实现细节的过程,以便不让用户看到类的变量和方法可被该类的实例访问圆点符号用于访问对象的成员构造函数在创建对象时初始化对象,