JAVA(面向对象基础部分).ppt

上传人:小飞机 文档编号:6509148 上传时间:2023-11-07 格式:PPT 页数:42 大小:937KB
返回 下载 相关 举报
JAVA(面向对象基础部分).ppt_第1页
第1页 / 共42页
JAVA(面向对象基础部分).ppt_第2页
第2页 / 共42页
JAVA(面向对象基础部分).ppt_第3页
第3页 / 共42页
JAVA(面向对象基础部分).ppt_第4页
第4页 / 共42页
JAVA(面向对象基础部分).ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《JAVA(面向对象基础部分).ppt》由会员分享,可在线阅读,更多相关《JAVA(面向对象基础部分).ppt(42页珍藏版)》请在三一办公上搜索。

1、第五章 面向对象基础,Java程序设计,l h,路 强,hapter5 面向对象基础,本章学习提示,本章我们主要学习面向对象编程的基本概念。封装、继承、多态访问控制符的使用Static 和 final 的使用,hapter5 面向对象基础,目 录,hapter5 面向对象基础,OOP语言,面向对象程序设计(OOP Object-Orienten Programming)是现今程序设计的主流和流行趋势。在面向对象的程序设计中,将所有事物都作为对象来处理.OOP的基本思想是把人们对现实世界的认识过程应用到程序设计中。现实世界的物体就是对象,它有两个基本特点一个是物体的内部构成,另一个是物体的行为.

2、OOP与现实对象两个基本特点相对应的是数据和方法。数据表示对象的构成,方法表示对象的行为.,hapter5 面向对象基础,类的概念,类是对象的“模板”,对象是类的实例.类与对象之间的关系可以看成是抽象与具体的关系。其中类是抽象的,对象是具体的类描述了对象的属性和行为对象是类的一个实例在JAVA语言中,所有的东西都是对象,对象就如同是一种新型变量,通过赋值语句对该变量进行性初始化操作.比如,当设计灯泡的时候要求每一个灯泡都必须具有型号这个属性,同时还要能够进行打开、关闭等操作因此当把灯泡这些共同的属一生和行为集中起来的时候就抽象出一个灯泡类每一个具有这些属性和行为的,具体的灯泡就是这个灯泡类的对

3、象或者称为实例,hapter5 面向对象基础,面向对象的四大特性,抽象(Abstraction)封装(Encapsulation)继承(Inheritance)多态(Polymorphism),hapter5 面向对象基础,面向对象的基本特征,封装性:基本思想:把客观世界中联系紧密的元素及其相关操作组织在一起,使其相互作用隐藏、封装在内部,而对外部对象只提供单一的功能接口.目的:将对象的使用者和设计者分开。类比:汽车的左转、右转;被陶瓷封装的集成芯片,hapter5 面向对象基础,继承性,继承是OOP中一种由已有的类创建新类的机制。一个父类(公共属性的集合)可以有多个子类(是父类的特殊化),一

4、个子类只可以有一个父类 子类可以直接使用父类的方法,也可以根据需要修改父类中已经定义的方法(即不改变方法名,而修改方法的参数个数、参数类型)。父类和子类可有同名的方法(多态性)。,hapter5 面向对象基础,多态性,定义:由于父类和子类可以有同名的方法,在运行时JVM根据方法的参数个数和类型的不同来查找、决定执行哪个版本的方法,称为多态性.在程序执行时,JVM对对象某一方法的查找是从该对象类所在层次开始,沿类等级逐级向上进行,把第一个方法作为所要执行的方法。所以,子类的方法可以屏蔽父类的方法.,hapter5 面向对象基础,面向对象程序设计方法,面向对象程序设计方法是:对象=(算法+数据结构

5、)程序=(对象+对象+)算法与数据结构是一个整体,算法离不开数据结构,算法只能适用于特定的数据结构。面向对象中,算法与数据结构被捆绑成一个类OOA-OOD-OOI,hapter5 面向对象基础,目 录,hapter5 面向对象基础,数据存在哪里,对程序运行时各部分是如何展开的一一特别是内存是如何分配的,作一个直观的描述还是很有必要的.数据可以存储在以下六个地方:寄存器栈堆静态存储固定存储非内存的存储,hapter5 面向对象基础,数据存在哪里-1,寄存器这是反应最快的存储,因为它所处位置不同:处理器里.由于寄存器的数最非常有限,是由编译器分配的.非但不能直接控制寄存器,甚至连它存在的证据也找不

6、到.栈位于常规内存区里,处理器可以通过栈指针(stack pointer)对它进行直接访问.栈指针下移就创建新的存储空间,向上移就释放内存空间.仅次于寄存器的最快、最有效率的分配内存的方法.由于Java 编译器必须生成能控制栈指针移动的代码,所以程序编译的时候,那些将被存储在栈中的数据的大小和生命周期必须是已知的.使程序的灵活性受到了限制,所以尽管Java把某些数据-特别是对象的引用reference存放在栈里,但对象本身并没有放在栈里.,hapter5 面向对象基础,数据存在哪里-2,堆是“多用途的内存池”(也在内存里面),所有Java对象都保存在这里.堆的优点:分配空间的时候,编译器无需知

7、道该分配多少空间,或者这些数据会在堆里呆多长时间.因此使用堆的空间会比较灵活.只要想创建对象,用new就行了,程序执行的时候自会在堆里分配空间.堆的缺点:当然得为这种灵活性付出代价,分配堆的存储空间要比分配栈的慢一些(假如能像C+那样在栈里创建对象).静态存储“静态”在这里的意思就是“在固定的位置”(还是在RAM中)。静态存储中的数据在整个程序的运行期间都能访问到。可以用static关键词说明对象中的某个元索是静态的,但是Java对象本身是决不会放到静态存储中去的.,hapter5 面向对象基础,数据存在哪里-3,固定存储常量值通常直接放在程序里,这样它们就不会被改动,因而也更安全.非内存的存

8、储如果数据完全独立于程序,那么即使程序不运行,它也应该也还在;即使程序失去了对数据的控制,它也仍然还在.两个最主要的例子是流对象(streamed object)和持久化对象(persistent object).,hapter5 面向对象基础,类的定义,类定义的格式:类修饰符 class 类名 extends 父类名 implements 接口名 成员变量定义;方法定义;,定义类的结构包含有类说明和类的实体两部分。类的说明部分由关键字class与类名组成;类体包括变量的说明、方法的定义与实现两个部分。,类名的第一个字母要大写。类体要用花括号 括起来。,创建类对象一般形式:类名 对象变量=ne

9、w 类名(参数1,参数2,);或者类名 对象变量;对象变量=new 类名(参数1,参数2,);,hapter5 面向对象基础,类的定义,/创建一个新人物class People private String name,address;public void setInfo(String newname,String newaddress)name=newname;address=newaddress;public String toString()return+name+,+address+;public class ch05_01_People public static void main

10、(String args)People someguy=new People();someguy.setInfo(佐助,火影村);System.out.println(someguy.toString();,hapter5 面向对象基础,声明对象时的内存模型,当用People类声明一个对象someguy:People someguy=new People();内存模型仅建立了“someguy”对象的引用(reference)尚未真正分配内存空间,hapter5 面向对象基础,对象分配内存后的内存模型,当系统见到 someguy.setInfo(佐助,火影村);做两件事:为x和y成员变量分配内存

11、,即类的所有成员变量被分配内存空间,然后执行构造方法中的语句.new运算符在为name和address成员变量分配内存后,将返回一个引用 给对象 someguy。,hapter5 面向对象基础,对象的初始化和构造方法,构造方法是一个类方法中方法名与类名相同的类方法,它的作用是当使用new关键字创建一个对象时,自动调用并对新建对象进行初始化操作.构造方法的特点构造方法与类名相同构造方法没有返回值,不定义返回类型构造方法可以重载,针对参数数量和类型定义多个同名构造方法构造方法可以继承,子类可以继承父类的构造方法构造方法不能由编程人员显式地直接调用,它是在对象创建时由new运算符自动调用的构造方法只

12、用来对类实例进行初始化,目的在于简化初始化操作在Java中,对象的创建和初始化是统一的两者缺一不可,hapter5 面向对象基础,构造方法构造方法的作用,构造方法的作用对象初始化引入更多的灵活度(变量赋值或更复杂的操作)类中可以不定义构造方法每个类都至少有一个构造方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法。默认构造方法的名字与类名相同,它的参数列表和方法体均为空,自动将所有实例变量初始化为默认值(数值型为0,布尔型为false,字符型为u0000,对象型为null).一旦定义了自己的构造方法,默认构造方法将不再起作用.,hapter5 面向对象基础,Code,

13、/如何将没有设计构造器的类添加构造器/研究带有构造器的类与没有构造器的类之间的区别 class Student/定义 Student 类 static long sum=0;String name;String address;String grade;static int score;public static long collect()/定义类的方法 sum+=score;return sum;public void setInfo(String x1,String x2,String x3)name=x1;address=x2;grade=x3;public void setScore

14、(int y)score=y;public class ch05_04_Student public static void main(String args)Student zhang=new Student();/创建Student类的对象 zhang.setInfo(“张三”,“屯溪路”,“计算机学院);zhang.setScore(90);zhang.collect();Student wang=new Student();/创建Student类的对象 wang.setInfo(王五,屯溪路,计算机学院);wang.setScore(85);(zhang.name+zhang.addr

15、ess+zhang.grade);(wang.name+wang.address+wang.grade);(总成绩是+wang.collect();,hapter5 面向对象基础,Code,/采用构造方法实现上述功能,研究带有构造器的类与没有构造器的类之间的区别class Student static long sum=0;String name;String address;String grade;static int score;public static long collect()/定义类的方法 sum+=score;return sum;Student(String x1,Stri

16、ng x2,String x3,int y)name=x1;address=x2;grade=x3;score=y;public class ch05_05_Student public static void main(String args)Student zhang;zhang=new Student(张三,屯溪路,计算机学院,90);zhang.collect();Student wang=new Student(李四,屯溪路,计算机学院“,85);System.out.println(zhang.name+zhang.address+zhang.grade);System.out.p

17、rintln(wang.name+wang.address+wang.grade);(总成绩是+wang.collect();,hapter5 面向对象基础,目 录,hapter5 面向对象基础,访问控制符,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。这种访问控制的级别在“最大访问”和“最小访问”的范围之间.分别包括:public,默认(无关键字),protected以及private。下面的列表说明访问控制修饰符含义:,hapter5 面向对象基础,公共访问控制符public,无论是类或者类成员,只要被声明成public,就意味着它可以被从任何地方访问.一个类作为整体对

18、程序的其他部分可见,并不能代表类内的所有属性和方法也同时对程序的其他部分可见,前者只是后者的必要条件,类的属性和方法能否为所有其他类所访问,还要看这些属性和方法自己的访问控制符.实例变量采用public关键字,这是一种非常糟糕的做法,破坏封装.,hapter5 面向对象基础,默认访问控制符,假如类或者类成员不含有一个明确的访问说明,说明它具有默认的访问控制特性。默认的访问控制权规定类或者类成员只能被同一个包中的其他代码所访问,在包外不可见。这种访问特性称为包访问性。Java语言中的包是类和接口的集合,它从更高级别上提供了对类和接口的存取保护和命名空间管理。,hapter5 面向对象基础,私有访

19、问控制符private,用private修饰的类成员只能被该类中的其他成员所访问,在该类外不可见.例如,在Point2D类中有两个变量,它们被定义成以下形式:private double x;private double y;private(私有的)关键字用来确保可以访问这些实例变量的只能是Point2D类本身的方法。在大多数实际应用的类中,有必要仅仅允许通过方法来对数据进行操作,维护封装.,hapter5 面向对象基础,保护访问控制符protected,用protected修饰的类成员不但对于同一个包中的其他类是可见的,而且对于其他包中该类的子类也是可见的。Protected 仅用于继承情况

20、中。,hapter5 面向对象基础,目 录,hapter5 面向对象基础,static&final,static 修饰的成员变量为静态变量static 修饰的方法为静态方法,被static修饰的成员变量成为静态变量,保存在内存区的公共存储单元中,而不是保存在某个对象的内存区中。任何一个类对象在访问它时都会得到相同的数值。如果某一个类对象对它进行了修改,所有对象的此成员变量也都做了修改。静态方法属整个类,不用进行实例化操作,使用时方法前加类名而不是对象名。,final 修饰的变量为最终成员变量final 修饰的方法为最终方法,最终成员变量一般是在声明时进行初始化,一旦最终成员变量被赋值,则它在整

21、个程序执行过程中不能改变。当声明常量时,可以使用final 加上类型和常量名最终方法不能被重复定义或更改方法的内容,不能被重载,hapter5 面向对象基础,Code-static成员变量,/定义一个学生档案类,包括学生姓名、性别和所在学校/使用static修饰成员变量class Student String name;String sex;static String school=合肥工业大学;public class ch05_06_Student public static void main(String args)Student me=new Student();Student yo

22、u=new Student();me.name=李明;me.sex=男;you.name=张敏;you.sex=女;/对类成员变量赋值 Student.school=安徽大学;System.out.println(me.name+me.sex+me.school);System.out.println(you.name+you.sex+you.school);,hapter5 面向对象基础,Code-final成员变量,/定义类及其方法,引用此方法时/通过final实参对类进行初始化操作class Calculate private double r;final double PI=3.141

23、59;void area(double r)double x;x=PI*r*r;System.out.println(Area=“+x);public class ch05_07_Calculate public static void main(String args)Calculate dd=new Calculate();dd.area(12.3);,hapter5 面向对象基础,Code-static方法,static修饰的方法称为静态方法或成为类方法,属于整个类,在任何地方都可以使用,而不必对类进行实例化操作/如何引用类方法/注意本程序需要从命令行输入两个整型参数public cla

24、ss ch05_08_Sta_method int width,height;public static double area(int width,int height)return width*height;public static void main(String args)int i,j;double f;i=Integer.parseInt(args0);j=Integer.parseInt(args1);f=ch05_08_Sta_method.area(i,j);System.out.println(Area=+i+*+j+=+f);,hapter5 面向对象基础,Code-f

25、inal方法,使用final修饰的方法被称为最终方法,不能被更改,也不能被当前类的子类重载/定义Final类及其最终方法并引用此方法/注意本程序需要从命令行输入两个整型参数 public class ch05_09_Fin_method int width,height;public static final double area(int width,int height)return width*height;public static void main(String args)int i,j;double f;i=Integer.parseInt(args0);j=Integer.pa

26、rseInt(args1);f=ch05_09_Fin_method.area(i,j);(Area=+f);,hapter5 面向对象基础,目 录,hapter5 面向对象基础,内部类,在一个类里面定义的类Java支持在一个类中声明另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类.内部类的类体中不可以声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员.特点将相关的类逻辑上组织在一起.作为包含它的类的一个成员,可以访问包含类的变量和方法.Inner类的名字只能使用在定义它的范围内,即包含它的类内。包含类与被包含类名字不能重.Inner类可以定义在一个方法内

27、,它能够访问方法中用final定义的局部变量.,hapter5 面向对象基础,内部类,内部类可以被定义为private或protected类型。当一个类中嵌套另一个类时,访问保护并不妨碍内部类使用外部类的成员被定义为static型的内部类将自动转化为顶层类,它们不能再使用局部范围中或其他内部类中的数据和变量内部类不能定义static型成员,而只有顶层类才能定义static型成员。如果内部类需要使用static型成员,这个成员必须在外部类中加以定义应用内部类的好处:是创建事件接收者的一个方便方法,hapter5 面向对象基础,内部类之例,程序ch05_10,重载TwoListen类,使得在Two

28、Listen类中包括两个处理类,hapter5 面向对象基础,本章总结,本章我们学习了面向对象编程的基本概念。封装、继承、多态访问控制符的使用Static 和 final 的使用,hapter5 面向对象基础,作业与练习,什么是类?如何定义一个类?类中包含哪几部分,分别是什么?什么是对象?如何创建对象?什么是构造方法?构造方法有哪些特点?如何对对象进行初始化?静态方法与非静态方法的区别?final成员变量和方法有什么特点?编制程序,给定圆的半径和高度,计算圆柱体的体积,利用引用对象方法的形式表示。录入学生成绩,对于学生的班级是相同的,录入的内容包含有学生姓名、班级、课程名称、成绩,如果对于同样的课程名和相同的班级,如何进行处理?如果对于同一个班级,录入不同的学生成绩,又如何处理?,Thank You!,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号