您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第三章 Java的面向对象程序设计
目录113.1面向对象的概念3.2类3.3方法3.4对象3.5类的继承3.6类的多态3.7接口3.8包3.9UML简介课前思考22面向对象的概念在C++中类的声明语法?在C++中类的继承语法?C++中是否支持多继承?在C++中如何实现多态?在C++中是否有接口,如何实现?在C++中是否有抽象类?3.1面向对象的概念333.1.1面向过程编程与面向对象编程面向过程编程“自顶而下,逐步求精”的设计思想数据和过程作为相对独立的实体代码被组织到函数和过程中适合于中、小型项目面向对象编程对问题进行自行的分解把事物用对象描述数据和操作放置在一起构成一个整体3.1面向对象的概念443.1.2 面向对象编程的基本概念对象(Object)对象是把数据及其相关的操作封装在一起所构成的实体类(Class):类是基于对象之上的一个抽象概念,可认为是对象的描述,是创建对象的“模板”对象实例(instance)对象实例实际上是对象的另一种名称方法(method)类的专用函数叫做方法,是对对象实例数据的操作3.1面向对象的概念553.1.3 面向对象编程的特征封装性对象的使用者只能看到对象的外部特性,而看不到内部如何实现这些功能。减少了程序各部分之间的依赖,使程序的复杂性降低,而可靠性提高继承性使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。3.1面向对象的概念663.1.3 面向对象编程的特征多态性多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。通信相关性对象之间通过交互来实现复杂的行为信息接收对象接收对象中用哪个方法完成指定的动作此方法需要的参数。3.2类77一切都是对象在某种程度上,编写一个Java程序就是在定义类和创建对象Java的类分为两大部分:系统定义的类---java基础类库用户自定义的类3.2类883.2.1类的结构类的结构如下所示:类声明{类体}变量变量方法方法3.2类993.2.2类声明Java中的类声明格式:类修饰符class类名[extends父类名][implements接口名]{类体}3.2类10103.2.2类声明关键字class表明其后声明的是一个类。extends如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后implements如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后修饰符可以有多个,用来限定类的使用方式3.2类1111例:钟表类publicclassClock{}//成员变量inthour;intminute;intsecond;//成员方法publicvoidsetTime(intnewH,intnewM,intnewS){hour=newH;minute=newM;second=news;}publicvoidshowTime(){System.out.println(hour+:+minute+:+second);}3.2类12123.2.3类修饰符public修饰符类是公有的,可以被任何对象访问或继承一个源程序中(.java文件)最多只能存在一个public类final修饰符说明该类不能被继承使用final修饰符时一定要谨慎abstract修饰符声明类为抽象类表明该类不能被实例化,但可以被继承3.2类13133.2.3类修饰符空修饰符同一个包中的对象可以使用该类注意:以上几个修饰符可以进行组合public可以与abstract或final组合使用abstract与final不可以组合使用例:publicfinalPI{…}//合法abstractfinalPI{…}//非法3.2类1414intheight;Tree(){System.out.println(“用树种种了一课树);height=0;}Tree(inti){System.out.println(“栽了一棵高度为”+i+“的树);height=i;}voidinfo(){System.out.println(“树的高度是”+height+“米);}}例例::声明共有类声明共有类publicclassTree{publicclassTree{例例::声明终结类声明终结类finalclassTree{finalclassTree{例例::声明抽象类声明抽象类abstractclassTree{abstractclassTree{例例::修饰符组合使用修饰符组合使用publicabstractclassTree{publicabstractclassTree{例例::修饰符组合使用修饰符组合使用publicfinalclassTree{publicfinalclassTree{例例::修饰符组合使用修饰符组合使用abstractfinalclassTree{abstractfinalclassTree{例例::无修饰符无修饰符classTree{classTree{3.2类15153.2.4成员变量成员变量定义定义格式:[修饰符]变量类型变量名;注意事项:类的成员变量必须放在类体中不能包含在某一个方法体内,否则成为局部变量3.2类16163.2.4成员变量修饰符访问修饰符public允许Java系统中所有的类访问private只能被其所属的类访问protected类派生的子类以及同一包中的其他类访问default可以被所归属的类、同一包中的其他类访问静态变量修饰符static静态变量将被从此类创建的所有对象共享使用类的静态变量不需要实例化该类,而可以直接使用常量修饰符final常量在程序中是不能被改变的一般在声明时初始化3.2类17173.2.4成员变量publicclassPoint{privateintx;privateinty;publicstaticintpointCount=0;publicPoint(intx,inty){this.x=x;this.y=y;pointCount++;}}3.2类18183.2.5方法方法描述对象所具有的功能或操作,反映对象的行为,是具有某种相对独立功能的程序模块。与子程序、函数等概念相当3.2类---方法1919方法的分类从方法的来源划分:类库方法用户自己定义的方法从方法的形式划分:无参方法带参方法从方法的使用方式划分:成员方法类方法3.2类---方法2020声明方法的格式格式如下:[修饰符]返回值的类型成员方法名(形式参数表)throws[异常表]{方法体}注意:方法的声明只能在类中进行3.2类---方法2121声明方法的格式格式说明修饰符[public|protected|private|default][static][final][abstract][native][synchronized]返回值的类型方法返回值的类型,可以是任意的Java数据类型当不需要返回值时,返回类型为void形式参数表简单数据类型引用类型(数组、类或接口)throws[异常表]用来抛出异常3.2类---方法2222例:publicclassCircle{staticdoublePI=3.14159265;intradius;publicdoublecircumference(){return2*PI*radius;}}3.2类---方法2323测试程序:publicclassCircumferenceTester{publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();c1.radius=50;Circlec2=newCircle();c2.radius=10;doublecircum1=c1.circumference();doublecircum2=c2.circumference();System.out.println(“第一个圆的周长是+circum1);System.out.println(“第二个圆的周长是+circum2);}}3.2类---方法2424在Circle类及Rectangle类中声明计算面积的方法area()publicclassCircle{staticdoublePI=3.14159265;intradius;publicdoublecircumference(){return2*PI*radius;}publicdoublearea(){ returnPI*radius*radius; }}publicclassRectangle{doublewidth;doubleheight;publicdoublearea(){returnwidth*height;}}3.2类---方法2525创建测试类:publicclassAreaTester{publicstaticvoidmain(Stringargs[]){Circlec=newCircle();c.radius=50;Rectangler=newRectangle();r.width=20;r.height=30;System.out.println(“圆的面积是+c.area());System.out.println(“矩形的面积是+r.area());}}3.2类---方法2626方法体中的局部变量局部变量是方法体内定义的变量生存期与作用域是在本方法内方法体内定义变量时,变量前不加修饰符在使用前必须明确赋值,否则编译时会出错3.2类---方法2727方法的参数和返回值---基本数据类型publicclassCircle{staticdoublePI=3.14159265;intradius;publicdoublecircumference(){return2*PI*radius;}publicdoublearea(){ returnPI*radius*radius; }publicvoidenlarge(intfactor){radius=radius*factor;}}3.2类---方法2828测试类publicclassEnlargeTester{publicstaticvoidmain(Stringargs[]){Circlec1=newCircle();c1.radius=50;Circlec2=newCircle();c2.radius=10;System.out.println(Circle1的周长:+c1.circumference());System.out.println(Circle2的周长:+c2.circumference());c2.enlarge(4);System.out.println(Circle2扩大后的周长:+c2.circumference());}}3.2类---方法2929方法的参数和返回值---数组publicclassArrayex{staticString[]getArray(){//返回一个字符型数组String[]array={Helloworld!,No,Imeanit!,HELLOWORLD!!};returnarray;}staticvoidprintArray(String[]data){for(inti=0;idata.length;i++){System.out.println(data[i]);//输出数组元素}}publicstaticvoidmain(String[]args){String[]rtnArray=getArray();printArray(rtnArray);}}3.2类---方法3030类方法也称为静态方法,表示类中对象的共有行为声明时前面需加st
本文标题:第三章 Java的面向对象程序设计
链接地址:https://www.777doc.com/doc-5327725 .html