java第5章继承与多态课件_第1页
java第5章继承与多态课件_第2页
java第5章继承与多态课件_第3页
java第5章继承与多态课件_第4页
java第5章继承与多态课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章第五章第五章继承与多态继承与多态本节要点和目标本节要点和目标.一、继承二、多态三、包四、接口一、继承继承(一)继承的含义(一)继承的含义 继承继承实际上是存在于面向对象实际上是存在于面向对象程序中的两个类之间的一种关系。程序中的两个类之间的一种关系。当一个类获取另一个类中所有非私当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类部分或全部成分时,就称这两个类之间具有继承关系。被继承的类称之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。的所有数据和操

2、作的类称为子类。(二)类的继承(二)类的继承/ appl5_1派生子类class CCircle / 定义类CCircle private double pi=3.14; private double radius; public CCircle( ) / CCircle( )构造方法 System.out.println(CCircle( ) constructor called); public void setRadius(double r) radius=r; System.out.println(radius=+radius); public void show() System.o

3、ut.println(area=+pi*radius*radius); class CCoin extends CCircle /定义CCoin类,继承自CCircle类 private int value; public CCoin( ) / CCoin()构造方法 System.out.println(CCoin( ) constructor called); public void setValue(int t) value=t; System.out.println(value=+value); public class appl5_1 public static void main(

4、String args) CCoin coin=new CCoin(); / 建立CCoin对象 coin.setRadius(2.0); / 调用父类的setRadius() method coin.show(); /调用父类的show() method coin.setValue(5); / 调用子类的setValue() method (三)构造方法的继承(三)构造方法的继承子类可以继承父类的构造方法,构造方法的继承遵子类可以继承父类的构造方法,构造方法的继承遵循以下的原则:循以下的原则:(1) 子类无条件继承父类的不含参数的构造方法。子类无条件继承父类的不含参数的构造方法。(2) 如果

5、子类自己没有构造方法,则它将继承父类的如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。行自己的构造方法。(3) 父类的含参数构造方法,子类可以通过在自己构父类的含参数构造方法,子类可以通过在自己构造方法中使用造方法中使用super关键字来调用,但这个调用关键字来调用,但这个调用语句必须是子类构造方法的第一个可执行语句。语句必须是子类构

6、造方法的第一个可执行语句。/ appl5_2构造方法的继承class superclass /父类int x=8; /*superclass(int y) /父类构造方法 System.out.println(y); */ public class appl5_2 extends superclass /子类 appl5_2( ) /子类构造方法 /super(5); System.out.println(super.x); public static void main(String args) appl5_2 a=new appl5_2( );/ 建立appl5_2对象 (四)this和s

7、uper(四)this和super this和和super是常用来指代父类对象是常用来指代父类对象和子类对象的关键字。和子类对象的关键字。 this表示的是表示的是当前对象本身,当前对象本身,this代表了当前对象代表了当前对象的一个引用的一个引用,它仅仅是对象的另一个名它仅仅是对象的另一个名字。利用字。利用this可以调用当前对象的方可以调用当前对象的方法或使用当前对象的域。法或使用当前对象的域。super表示的表示的是当前对象的直接父类对象,是当前是当前对象的直接父类对象,是当前对象的直接父类对象的引用。对象的直接父类对象的引用。/ appl5_3 this和super的使用(1)clas

8、s superclass /父类int x=8; public class appl5_3 extends superclass /子类 int y=9; appl5_3( ) /子类构造方法 System.out.println(this.y); System.out.println(super.x); public static void main(String args) appl5_3 a=new appl5_3( );/ 建立appl5_3对象 二、多态多态(一)多态的含义(一)多态的含义 所谓所谓多态多态,是指一个程序,是指一个程序中同名的不同方法共存的情况。中同名的不同方法共存的

9、情况。面向对象的程序中多态的情况面向对象的程序中多态的情况有多种,可以通过子类对父类有多种,可以通过子类对父类方法的覆盖实现多态,也可以方法的覆盖实现多态,也可以利用重载在同一个类中定义多利用重载在同一个类中定义多个同名的不同方法。个同名的不同方法。(二)覆盖与隐藏(二)覆盖与隐藏 子类对继承自父类的方法的重子类对继承自父类的方法的重新定义,就称为方法的覆盖新定义,就称为方法的覆盖(overload)。 子类重新定义一个与从父类那子类重新定义一个与从父类那里继承来的域变量完全相同的变里继承来的域变量完全相同的变量,称为域的隐藏。量,称为域的隐藏。穿衣穿衣肤色肤色/ appl5_4, 方法的覆盖

10、方法的覆盖, ,域的隐藏域的隐藏class CCircle / 父类CCircle protected double radius; protected static double pi=3.14; public CCircle(double r) radius=r; public void show( ) / 父类里的show() method System.out.println(radius=+radius); class CCoin extends CCircle / 子类CCoin private int value; public CCoin(double r,int v) sup

11、er(r); value=v; public void show( ) / 子类里的show() method System.out.println(radius= +radius+, value= +value); public class appl5_4 public static void main(String args) CCoin coin=new CCoin(2.0,5); coin.show(); (三)重载(三)重载 方法的重载是指类对自身已有的同名方法的方法的重载是指类对自身已有的同名方法的重新定义。多个方法可以享有相同的名字,但重新定义。多个方法可以享有相同的名字,但是,

12、这些方法的参数必须不同,是,这些方法的参数必须不同, 它们或是参数它们或是参数的数量不同,或是参数的类型不同。的数量不同,或是参数的类型不同。找零找零制冷制冷制热制热除湿除湿/ appl5_5, 方法的重载方法的重载(1)(1)class CCircle / 定义类CCircle private String color; private double pi=3.14; private double radius; public void setColor(String str) /设置color的方法 color=str; public void setRadius(double r) /设

13、置radius的方法 radius=r; public void setAll(String str, double r) color=str; / 同时设置color与radius radius=r; public void show( ) / 打印半径、颜色与圆面积System.out.println(color=+color+, Radius=+radius);System.out.println(area=+pi*radius*radius); public class appl5_5 public static void main(String args) CCircle cir1=

14、new CCircle(); cir1.setColor(Red); / 设置cir1的color cir1.setRadius(2.0); / 设置cir1的radius cir1.show(); cir1.setAll(Blue,4.0); / 同时设置cir1的color和radius cir1.show(); / appl5_5, 方法的重载方法的重载(2)(2)class CCircle / 定义类CCircle private String color; private double pi=3.14; private double radius; public void setCi

15、rcle(String str) / 设置color成员 color=str; public void setCircle(double r) / 设置radius成员 radius=r; public void setCircle(String str, double r) color=str; / 同时设置color与radius radius=r; public void show() System.out.println(color=+color+, Radius=+radius); System.out.println(area=+pi*radius*radius); public

16、class appl5_5 public static void main(String args) CCircle cir1=new CCircle(); cir1.setCircle(“Red”); / 调用第一个setCircle() 方法 cir1.setCircle(2.0); / 调用第二个setCircle() 方法 cir1.show(); cir1.setCircle(“Blue”,4.0); / 调用第三个setCircle() 方法 cir1.show(); public void setCircle(String str) color=str;public void s

17、etCircle(double r) radius=r;public void setCircle(String str,double r) color=str; radius=r; public class appl5_5 public static void main(String args ) cir1.setCircle(“Red”); cir1.setCircle(2.0); cir1.setCircle(“Blue”,4.0); (四)构造方法的重载(四)构造方法的重载 构造方法的重载是指同一构造方法的重载是指同一个类中存在着若干个具有不个类中存在着若干个具有不同参数列表的构造方法

18、。同参数列表的构造方法。三、包包(一)文件的分割(一)文件的分割/appl5_6 /appl5_6 文件分割文件分割class CCircleclass CCircle public void show( ) public void show( ) System.out.println(“This is a CCircle class”); System.out.println(“This is a CCircle class”); public class appl5_6public class appl5_6 public static void main(String args ) pu

19、blic static void main(String args ) CCircle cir=new CCircle( ); CCircle cir=new CCircle( ); cir.show( ); cir.show( ); /CCircle.java,/CCircle.java,假设本文件置于假设本文件置于e:javapack1e:javapack1class CCircleclass CCirclepublic void show( )public void show( ) System.out.println(“This is a CCircle class”); System

20、.out.println(“This is a CCircle class”); /appl5_6.java,/appl5_6.java,假设本文件置于假设本文件置于e:javapack1e:javapack1public class appl5_6public class appl5_6public static void main(String args )public static void main(String args ) CCircle cir=new CCircle( ); CCircle cir=new CCircle( ); cir.show( ); cir.show( )

21、; e:javapack1e:javapack1e:javapack1 javac Ccircle.java e:javapack1 javac Ccircle.java e:javapack1 javac appl5_6.java e:javapack1 javac appl5_6.java (e:javajavac pack1app5_6.java) (e:javajavac pack1app5_6.java) e:javapack1 java appl5_6 e:javapack1 java appl5_6 This is a CCircle classThis is a CCircle

22、 class 包是一个相关的类和接口的集合,包是一个相关的类和接口的集合,它可以提供访问保护和名称空间管它可以提供访问保护和名称空间管理。包的概念类似于理。包的概念类似于windows操作操作系统中的文件夹(目录)。包是类系统中的文件夹(目录)。包是类的集合,引入包的机制是为了避免的集合,引入包的机制是为了避免类名的冲突,同时使得各个类的层类名的冲突,同时使得各个类的层次结构分明。次结构分明。 java语言中的类和接口是各种包的语言中的类和接口是各种包的成员,每个集合是一个包,合称为成员,每个集合是一个包,合称为“类库类库”。(二 )创建包(二)创建包package语句的要求:语句的要求:对于

23、将要包含到包中的类,要求对于将要包含到包中的类,要求它的代码必须它的代码必须和包中其它文件在同一个目录中。和包中其它文件在同一个目录中。package语句必须是文件中的第一个语句。在语句必须是文件中的第一个语句。在package语句之前除了空白和注释以外不能有语句之前除了空白和注释以外不能有任何东西。任何东西。/ appl5_7, package的使用文件置于在e:javapack2文件夹内package pack2;class CCircle / CCircle类已被纳入package pack2当中 public void show( ) System.out.println(show(

24、) method called); public class appl5_7 / 将appl5_7类也纳入package pack2当中 public static void main(String args ) CCircle cir=new CCircle(); cir.show(); (三)包的引用(三 )包的引用/ CCircle.java此文件存放在pack3b文件夹内package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件

25、夹内package pack3a;public class appl5_8 public static void main(String args ) pack3b.CCircle cir=new pack3b.CCircle(); cir.show(); / CCircle.java此文件存放在pack3b文件夹内package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件夹内package pack3a;import pack3b.C

26、Circle;public class appl5_8 public static void main(String args ) CCircle cir=new CCircle(); cir.show(); / CCircle.java此文件存放在pack3b文件夹内package pack3b;public class CCircle public void show( ) System.out.println(“*); / appl5_8.java 此文件存放在pack3a文件夹内package pack3a;import pack3b.*;public class appl5_8 pu

27、blic static void main(String args ) CCircle cir=new CCircle(); cir.show(); 四、接口接口(一)接口概述(一)接口概述接口是一个有名称的方法定义的集合,接口是一个有名称的方法定义的集合,是用来实现类间是用来实现类间“多重继承多重继承”功能的功能的结构。接口中只有常量和抽象方法。结构。接口中只有常量和抽象方法。接口与抽象类的区别是:接口与抽象类的区别是:(1)接口的数据成员必须初始化;接口的数据成员必须初始化;(2)接口里的接口里的method必须全部都声明成必须全部都声明成abstract;(3)类可以实现许多接口,但只能

28、有一个类可以实现许多接口,但只能有一个超类。超类。(二)声明接口(二)声明接口接口的成员变量必须是接口的成员变量必须是public、static和和final,这是,这是java系统默系统默认的规定,所以接口的成员变量也可以没有任何修饰符,其认的规定,所以接口的成员变量也可以没有任何修饰符,其作用是完全一样的。接口的抽象方法必须是作用是完全一样的。接口的抽象方法必须是public和和abstract,这也是这也是java系统默认的规定,所以接口的抽象方法也可以没系统默认的规定,所以接口的抽象方法也可以没有任何修饰符,其作用是完全一样的。有任何修饰符,其作用是完全一样的。interface iS

29、hape2D / /定义接口定义接口 final double pi=3.14; / /数据成员一定要初始化数据成员一定要初始化 abstract void area( ); abstract void area( ); / /抽象方法抽象方法 (三)实现接口(三)实现接口/ appl5_9接口的实现接口的实现class CRectangle implements iShape2D / 实现CRectangle类 int width,height; public CRectangle(int w,int h) width=w; height=h; public void area( ) / 定义area( )的处理方式 System.out.println(area=+width*height); class CCircle implements iShape2D / 实现CCircle类 double radius; public CCircle(double r) radius=r; public void area(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论