您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第三章 JAVA面向对象编程-2
第三章面向对象的概念和Java实现-22回顾类是具有相同属性和行为的一组对象的集合,对象是类的实例封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节类可用Class来定义,类的变量和方法可被该类的实例访问,圆点符号用于访问对象的成员,构造函数在创建对象时初始化对象包可用package来申明,可用import来导入包3目标掌握对象掌握类理解抽象和封装理解对象与类之间的关系掌握包的创建和导入理解继承及其特点运用JAVA程序实现继承理解多态及其特点设计运用JAVA程序实现多态掌握访问修饰符和方法修饰符4继承父类子类父类/子类是相对的Cow类Lion类Tiger类Animals类Carnivorous食肉类Herbivorous食草类Coat类5继承的特点继承的特点具有层次结构子类继承了父类的属性和方法6继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类7继承的JAVA实现演示:示例1编写一个父类使用extends关键字,编写子类classVehicles{/**存储交通工具的名称.*/protectedStringname=HondaCivic;/**存储颜色信息.*/protectedStringcolor=Red;/**存储座位信息.*/protectedintseats=5;/**构造方法.*/Vehicles(){}/***显示父类汽车的详细信息*/voidshowDetail(){System.out.println(从父类Vehicles中输出的信息);System.out.println(名称-+name);System.out.println(颜色-+color);}}8classCarextendsVehicles{/**构造方法.*/Car(){}/**显示子类Car的信息.*/voidshow(){System.out.println(“从子类Car中输出的信息);System.out.println(“交通工具的名称-+name);System.out.println(“交通工具的颜色-+color);System.out.println(“座位的数量-+seats);System.out.println(==============================);}}publicclassCarTest{/***构造方法*/CarTest(){}/***这是main方法*@paramargs传递至main方法的参数*/publicstaticvoidmain(String[]args){/*声明一个对象*/Carvehicle=newCar();vehicle.show();vehicle.showDetail();}}9子类构造方法2-1子类构造方法的名称与类的名称相同先调用父类构造方法,再调用子类构造方法要调用父类构造方法,使用关键字super10子类构造方法2-2调用父类构造方法的语法为:super()或super(参数列表);super()方法始终指向调用类的父类11调用父类构造方法演示:示例3关键字super的用法classFictionAuthorextendsAuthor{/**存储作者的小说类型.*/Stringstorytype;/**子类构造方法.@paramname传递至构造方法的参数@paramtype传递至构造方法的参数*/FictionAuthor(Stringname,Stringtype){super(name);storytype=type;System.out.println(“从FictionAuthor类输出);System.out.println(“小说类型为+storytype);}}调用父类构造方法Author(Stringstr){name=str;System.out.println(“从Author类输出);System.out.println(“姓名为+name);}构造函数的继承子类可以继承父类的构造函数,构造函数的继承遵循以下的原则:(1)子类无条件继承父类的不含参数的构造函数。(2)如果子类自己没有构造函数,则它将继承父类的无参数构造函数作为自己的构造函数;如果子类自己定义了构造函数,则在创建新对象时,它将先执行继承自父类的无参数构造函数,然后再执行自己的构造函数。(3)父类的含参数构造函数,子类可以通过在自己构造函数中使用super关键字来调用,但这个调用语句必须是子类构造函数的第一个可执行语句。构造函数相互调用一个类的若干个构造函数之间可以相互调用。当一个构造函数需要调用另一个构造函数时,可以使用关键字this,同时这个调用语句应该是整个构造函数的第一个可执行语句。例如,上面D200-Card类的后几个构造函数可以改写为:D200-Card(longcn)//一个参数的构造函数,初始化电话卡号{this();cardNumber=cn;}D200-Card(longcn,intpw)//两个参数的构造函数,初始化电话卡号和密码{this(cn);password=pw;}见例子TThis.java14多态性2-1所谓多态,是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的情况有多种,可以通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法。多态性是指“多种形式”它使用不同的实例而执行不同操作多态包括方法重写和方法重载15多态性2-2父类子类-绘制和移动三角形子类-绘制和移动矩形子类-绘制和移动五边形ShapeDraw()Move()TriangleDraw(){DrawTraingle}Move(){MoveTriangleVertices}RectangleDraw(){DrawRectangle}Move(){MoveRectangleCorner}PentagonDraw(){DrawPentagon}Move(){MovePentagonVertices}16方法重载2-1方法重载类中有多个具有相同名称的方法方法重载类中有多个具有相同名称的方法方法具有不同的参数列表17方法重载2-2演示:示例4publicclassDisplayNumber{/***无参数可显示/voiddisplay(){System.out.println(无参数可显示!!);}/***@paramnum传递至display方法的参数*@paramnum1传递至display方法的参数*/voiddisplay(intnum,intnum1){System.out.println(两个整数是:+num++num1);}/***@param型的count由display方法接收*/voiddisplay(doublecount){System.out.println(在display(double)方法内:+count)}……}publicstaticvoidmain(String[]arg){intcount=25;DisplayNumberdispObj=newDisplayNumber();dispObj.display();dispObj.display(10,20);/*不存在具有一个int型参数的方法,*int型值自动转化为double型值*/System.out.println(“调用display(double)方法,+“使用int变量:+count);dispObj.display(count);dispObj.display(25.5);}18方法重写2-1方法重写子类和父类的方法具有相同的名称和类型用子类对象调用子类中的重写方法super.methodname()用于调用父类中的方法19classRectangle{intlength;intwidth;Rectangle(intlen,intwid){length=len;width=wid;}/*计算矩形的周长.*/voidgetPerimeter(){System.out.println(“矩形的周长为+(2*(length+width)));}}方法重写2-2父类和子类中具有相同名称和类型的方法publicstaticvoidmain(String[]arg){RectanglerectObj=newRectangle(10,15);rectObj.getPerimeter();RectanglesqObj=newSquare(15);sqObj.getPerimeter();}调用父类方法调用子类方法classSquareextendsRectangle{Square(intlen){length=len;}/*计算周长.*/voidgetPerimeter(){System.out.println(“正方形的周长为+(4*length));}}20访问修饰符3-1信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除数据此类易于使用访问修饰符访问修饰符privateprotectedpublic默认21访问修饰符3-2该类或非该类均可访问public只有该类可以访问private相同数据包中的类可以访问默认该类及其子类的成员可以访问,同一个包中的类也可访问protected22访问修饰符3-3访问修饰符可访问性位置private默认protectedpublic同一个类是是是是同一个包内的类否是是是不同包内的子类否否是是不同包并且不是子类否否否是23类的修饰符3-1Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类,有些类的修饰符也可以用来修饰类中的域或方法,本节讨论类的非访问控制符。类修饰符(Modifier):public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类缺省(friendly):可被当前包中的其他类访问abstract:没有实例的抽象概念类,是它的所有子类的公共属性和公共方法的集合final:不能再被扩展,不能有子类的类;易于安全性的实现,或用于创建固定功能的类24抽象类3-2凡是用abstract修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类。较高层次的概括抽象类的作用是让其他类来继承它的抽象化的特征。在程序中不能用抽象类作为模板来创建对象。抽象类经常要包含某些抽象方法(方法的具体实现要在子类中实现)。抽象类的优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。类中的方法不进行实现,而所有子类必须实现该方法类中只要有一个抽象方法,则整个类就声明为抽象的类中至少有一个方法为抽象的,类不能实例化25最终类3-3如果一个类被final修饰符所修饰和限定,说明这个类不可能有子类。final类一定是没有子类的叶结点(不过叶结点却不一定是final类)。被定义为final的类通常是一些有固定作用、用来完成某种标准功能的类。abstract和final修饰符不能同时修饰一个类,因为abstract类自身没有具体对象,需要派生出子类后再创建子类的对象;而final类不可能有子类,这样abstractfinal类就无法使用,也就没有意义了。不能被当前类的子类重新定义的方法。26域4-1域是类和对象的静态属性.它可以是基本数据类型的变量,也可以是其他类(系统类或用户自定义类)的对象,所以定义类时定义域的操作就是说明变量或创建对象的操作。与类相似,域也可以拥有若干修饰符,包括访问控制符和非访问控制符。先讨论非访问控制符。1).静态域用static修饰符修饰的域是仅属于类的静态域。静态域最本质的特点是:它们是类的域,不属于任何一
本文标题:第三章 JAVA面向对象编程-2
链接地址:https://www.777doc.com/doc-4174928 .html