面向对象java语言程序设计课程第四章xin

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

面向对象JAVA语言程序设计信息科学与技术学院网络工程系周文峰2第4章面向对象编程•面向对象基本概念•Java的类与对象•成员变量与封装•成员方法•继承•多态•特殊类•接口3第4章面向对象编程主要任务:理解面向对象编程的基本概念了解类的封装方法如何创建类和对象了解成员变量和成员方法的特性学习使用OOP方式进行程序设计4学习导读•Java程序是由一个个类定义组成的,编写Java程序的过程就是从现实世界中抽象出Java可实现的类并用合适的语句定义它们的过程,这个定义过程包括对类内各种属性和方法的定义,创建类的对象,也包括类间的各种关系和接口的定义。•方法是类的主要组成部分。在一个类中,程序的作用体现在方法中。方法是Java语言的基本构件。利用方法可以组成结构良好的程序。本章介绍方法的构成规则和设计、使用方法的基本要点。54.1面向对象基本概念•Java是完全面向对象编程语言。面向对象编程(OOP)是一种全新的编程理念,如果从来没有过OOP编程经验,需要从基本概念开始。•什么是对象?类又是什么?它们之间有什么关系?对象是如何通过消息和外部通讯的?64.1.1对象•在开发软件的信息世界中,对象定义为相关数据和方法的集合。•对象是现实世界真实对象的抽象模型。从现实世界真实对象中抽象出来的对象使用数据和方法描述其现实世界中的状态和行为特征,一般通过变量描述其状态,通过方法实现其行为。•变量是一种有名称的数据实体,而方法则是和对象相关的函数或过程。抽象就是抽出事物的本质特性而暂时不考虑它们的细节。74.1.2封装•封装的含义是把类设计成一个黑箱,使用者只能看见类中定义的公共方法,而看不到方法实现的细节,也不能直接对类的数据进行操作,迫使用户通过接口去访问数据,这种封装正是OOP设计者追求的理想境界。•相关数据和方法封装到一个包里,为程序员带来了两个好处:模块化和数据隐藏。84.1.3消息•对象的行为由方法来实现,消息传递是对象之间进行交互的主要方式。•构成消息的三个要素是:☆接收消息的对象☆接收消息后进行处理的方法☆方法所需要的参数94.1.4类•类就是对象的软件图纸、模板或原型,它定义了同类对象共有的变量和方法。•类和对象二者不太容易区分。一方面,由于软件对象都是现实对象或抽象概念的电子模型,另一方面,经常不加区分地将对象和类统称为“对象”。•Java编程就是设计类,可以采用自定义方法或继承方法设计一个类,然后使用它的实例对象完成具体的功能。10•说明:(1)所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。(2)程序中通过消息传递,各对象知道自己该做些什么。(3)每个对象都有自己的存储空间,可容纳其他对象。(4)每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。(5)同一类所有对象都能接收相同的消息。114.2类和对象Java语言与其他面向对象语言一样,引入了类和对象的概念,类是用来创建对象的模板,它包含被创建对象的属性和方法的定义。因此,要学习Java编程就必须学会怎样去编写类,即怎样用Java的语法去描述一类事物共有的属性和行为。对象的属性通过变量来刻画,而对象的行为通过方法来体现。方法可以操作属性形成一定的算法来实现一个具体的功能。类把属性和方法封装成一个整体。124.2.1定义类在Java语言中,类是基本的构成要素,是对象的模板,Java程序中所有的对象都是由类创建的。一个Java类主要包括以下两部分:类的声明类的主体13类的声明在类声明中,需要定义类的名称、对该类的访问权限、该类与其他类的关系等。类声明的格式如下:[修饰符]用于指定类的访问权限,可选值为public、abstract和final。[修饰符]class类名[extends父类名][implements接口列表]{}14类的声明-类名class类名类名用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。15类的声明-修饰符public(公共的)•在没有任何修饰符的缺省情况下,类只能被同一个源程序文件或同一个包中的其它类使用。•加上public修饰符后,类可以被任何包中的类使用,称为公共类。类的容器,分割类名空间。16类的声明-修饰符abstract(抽象的)•定义的类代表一个抽象的概念,就不能用它来实例化一个对象。•在OOP中,可能建立了一个不需要产生对象的类。例如,java.lang包中的Number类代表了数这个抽象概念,可以用它在程序中产生一个数的子类,如Interger或Float,但从Number中直接生成对象是没有意义的。•abstract说明的类称为抽象类,不能用它实例化一个对象,它只能被继承。17类的声明-修饰符final(最终的)•final说明的类称为最终类。一个最终类不可能有子类,也就是说它不能被继承。为什么要把一个类说明为最终类呢?有两点理由:为了提高系统的安全性和出于对一个完美类的偏爱。•黑客常用的一个攻击技术是设计一个子类,然后用它替换原来的父类。子类和父类很相象,但做的事情却大不一样。为防止这样的事情发生,你可以把你的类声明为最终类,不让黑客有机可乘。18类的声明-继承extends(继承)父类名•extends告诉编译器创建的类是从父类继承下来的子类,父类必须是Java系统类或已经定义的类。•从父类继承,可以提高代码的重用性,不必从头开始设计程序。大部分情况下应该利用继承的手段编程,只在没有合适的类可以继承时才自己设计类。19类的声明-实现implements(实现)接口名•implements告诉编译器当前类中实现了哪个接口定义的功能和方法。接口必须有定义,一般为系统类。•接口是消息传递的通道,通过接口,消息才能传递到处理方法中进行处理。implements说明你的类可以实现的一个或多个接口,如果有多个接口,要用逗号分隔。20类体类声明部分大括号中的内容为类体。类体主要由以下两部分构成:(1)成员变量的定义;(2)成员方法的定义。在程序设计过程中,编写一个能完全描述客观事物的类是不现实的。比如,构建一个Apple类,该类可以拥有很多很多的属性(即成员变量),在定义该类时,选取程序需要的必要属性和行为就可以了。214.2.2了解成员方法Java中类的行为由类的成员方法来实现。类的成员方法由方法声明和方法体两部分组成。其一般格式如下:[修饰符]方法返回值的类型方法名([参数列表]){[方法体]}类的方法,又称为成员函数,用来规定类属性上的操作,实现类的内部功能的机制,同时也是类与外界进行交互的重要窗口。224.2.2了解成员方法[修饰符]用于指定方法的访问权限,可选值为public、protected和private。方法返回值的类型用于指定该方法的返回值的类型,如果该方法没有返回值,必须使用关键字void进行标识。方法返回值的类型可以是任何Java数据类型。23了解成员方法方法名用于指定成员方法的名称,方法名必须是合法的Java标识符。[参数列表]用于指定方法中所需的参数。当存在多个参数时,各参数之间应使用逗号分隔。方法的参数可以是任何Java数据类型。24了解成员方法方法体是方法的实现部分,在方法体中可以完成指定的工作,可以只打印一句话,也可以省略方法体,使方法什么都不做。需要注意的是:当省略方法体时,其外面的大括号一定不能省略。【例4-1】实现两数相加。(Count.java)25publicclassCount{publicintadd(intsrc,intdes){intsum=src+des;returnsum;}publicstaticvoidmain(String[]args){Countcount=newCount();intapple1=30;intapple2=20;intnum=count.add(apple1,apple2);System.out.println(苹果总数是:+num+箱。);}}264.2.3成员变量和局部变量在类体中所声明的变量称为类的成员变量,而在方法体中声明的变量和方法的参数则称为局部变量。如何声明成员变量和局部变量,以及变量的有效范围?27声明成员变量Java用成员变量来表示类的状态和属性,声明成员变量的基本语法格式如下:修饰符:可选参数,用于指定变量的被访问权限,可选值为public、protected、private和package。static:可选,用于指定该成员变量为静态变量,可以直接通过类名访问。如果省略该关键字,则表示该成员变量为实例变量。[修饰符][static][final]变量类型变量名;28声明成员变量final:可选,用于指定该成员变量为取值不会改变的常量。变量类型:必选:用于指定变量的数据类型,其值可以为Java中的任何一种数据类型。变量名:必选,用于指定成员变量的名称,变量名必须是合法的Java标识符。291.访问控制权限•(1)public公共变量由public修饰的变量称为公共变量,,可被任何包中的任何类访问,只有在确认任何外部访问都不会带来不良后果的情况下才将成员声明为公共的。公共变量对任何类都是可见的,因此它没有秘密可言,不具有数据保护功能。•(2)private私有变量由private修饰的变量称为私有变量,只能被声明它的类所使用,拒绝任何外部类的访问。私有变量是不公开的,它们得到了最好的保护,这是对类进行封装时使用的主要方法。301.访问控制权限•(3)protected受保护变量由protected修饰的变量称为受保护变量,可被声明它的类和派生的子类以及同一个包中的类访问。•(4)package包变量由package修饰的变量称为包变量,在声明时常常省略package关键字,即没有修饰符的成员被视为包成员。包成员可被声明它的类和同一个包中的其它类(包括派生子类)所访问,在其它包中的子类则不能访问父类的包成员。31内容回顾•Java语句及控制结构•面向对象基本概念(对象,封装,消息,类等)•类的定义(类的声明,类体等)[修饰符]class类名[extends父类名][implements接口列表]{}322.static静态变量•static声明的成员变量被视为类的成员变量,而不把它当作实例对象的成员变量。•静态变量是类固有的,可以直接引用,其它成员变量仅仅被声明,生成实例对象后才存在,才可以被引用。•基于这样的事实,也把静态变量称为类变量,非静态变量称为实例变量。相应地,静态方法称为类方法,非静态方法称为实例方法。33例静态变量的使用classStaticDemo{staticintx;inty;staticpublicintgetX(){returnx;}staticpublicvoidsetX(intnewX){x=newX;}publicintgetY(){returny;}publicvoidsetY(intnewY){y=newY;}}34publicclassShowDemo{publicstaticvoidmain(String[]args){System.out.println(静态变量x=+StaticDemo.getX());System.out.println(实例变量y=+StaticDemo.getY());//非法,编译时将出错StaticDemoa=newStaticDemo();StaticDemob=newStaticDemo();35a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println(静态变量a.x=+a.getX());System.out.println(实例变量a.y=+a.getY());System.out.println(静态变量b.x=+b.getX());System.out.println(实例变量b.y=+b.getY());}}36对上面

1 / 202
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功