java第5章继承与多态.ppt

上传人:本田雅阁 文档编号:2145547 上传时间:2019-02-21 格式:PPT 页数:54 大小:1.22MB
返回 下载 相关 举报
java第5章继承与多态.ppt_第1页
第1页 / 共54页
java第5章继承与多态.ppt_第2页
第2页 / 共54页
java第5章继承与多态.ppt_第3页
第3页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java第5章继承与多态.ppt》由会员分享,可在线阅读,更多相关《java第5章继承与多态.ppt(54页珍藏版)》请在三一文库上搜索。

1、第五章,第五章 继承与多态,本节要点和目标,本节要点和目标.,一、继承 二、多态 三、包 四、接口,一、继承,一,继承,(一)继承的含义,(一)继承的含义,继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。,(二)类的继承,(二)类的继承,extends 用来说明类的父类,也即当前类(子类)继承父类的属性和方法。java语言中,如果在类说明中无extends,则隐含地假设其父类为java.lang.object

2、类。,extends ,/ 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.out.pr

3、intln(“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 ma

4、in(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关键字来调用,但这个调用语句必须是子类构造方法的第一个可执行语句。,/ appl5_2构造方法的继承 class superclass /父类 int x=8; /*superclass(int y) /父类构造方法 System.out.println(y); */ public class appl5_2 extends superclass /子类 appl5_2( ) /子类构造方法 /super(5); Syst

6、em.out.println(super.x); public static void main(String args) appl5_2 a=new appl5_2( ); / 建立appl5_2对象 ,(四)this和super,(四)this和super,this和super是常用来指代父类对象和子类对象的关键字。 this表示的是当前对象本身,this代表了当前对象的一个引用,它仅仅是对象的另一个名字。利用this可以调用当前对象的方法或使用当前对象的域。super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。,/ appl5_3 this和super的使用(1) c

7、lass 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对象 ,二、多态,二,多态,(一)多态的含义,(一)多态的含义,所谓多态,是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的

8、情况有多种,可以通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法。,(二)覆盖与隐藏,(二)覆盖与隐藏,子类对继承自父类的方法的重新定义,就称为方法的覆盖(overload)。,子类重新定义一个与从父类那里继承来的域变量完全相同的变量,称为域的隐藏。,穿衣,肤色,/ appl5_4, 方法的覆盖,域的隐藏 class CCircle / 父类CCircle protected double radius; protected static double pi=3.14; public CCircle(double r) radius=r; public voi

9、d show( ) / 父类里的show() method System.out.println(“radius=“+radius); ,class CCoin extends CCircle / 子类CCoin private int value; public CCoin(double r,int v) super(r); value=v; public void show( ) / 子类里的show() method System.out.println(“radius= “+radius+“, value= “+value); ,public class appl5_4 public

10、static void main(String args) CCoin coin=new CCoin(2.0,5); coin.show(); ,(三)重载,(三)重载,方法的重载是指类对自身已有的同名方法的重新定义。多个方法可以享有相同的名字,但是,这些方法的参数必须不同, 它们或是参数的数量不同,或是参数的类型不同。,找零,制冷,制热,除湿,/ appl5_5, 方法的重载(1) class CCircle / 定义类CCircle private String color; private double pi=3.14; private double radius; public voi

11、d setColor(String str) /设置color的方法 color=str; public void setRadius(double r) /设置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=“+

12、pi*radius*radius); ,public class appl5_5 public static void main(String args) CCircle cir1=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) class CCircle / 定义类CCirc

13、le private String color; private double pi=3.14; private double radius; public void setCircle(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.pr

14、intln(“color=“+color+“, “Radius=“+radius); System.out.println(“area=“+pi*radius*radius); ,public 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

15、.0); / 调用第三个setCircle() 方法 cir1.show(); ,public void setCircle(String str) color=str; public void setCircle(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

16、.setCircle(“Blue”,4.0); ,(四)构造方法的重载,(四)构造方法的重载,构造方法的重载是指同一个类中存在着若干个具有不同参数列表的构造方法。,三、包,三,包,(一)文件的分割,(一)文件的分割,/appl5_6 文件分割 class CCircle public void show( ) System.out.println(“This is a CCircle class”); public class appl5_6 public static void main(String args ) CCircle cir=new CCircle( ); cir.show(

17、); ,/CCircle.java,假设本文件置于e:javapack1 class CCircle public void show( ) System.out.println(“This is a CCircle class”); ,/appl5_6.java,假设本文件置于e:javapack1 public class appl5_6 public static void main(String args ) CCircle cir=new CCircle( ); cir.show( ); ,e:javapack1 e:javapack1 javac Ccircle.java e:ja

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

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

20、 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; public class appl5_8 public static voi

21、d main(String args ) pack3b.CCircle cir=new pack3b.CCircle(); cir.show(); , import 包名.类名 ;,/ CCircle.java此文件存放在pack3b文件夹内 package pack3b; public class CCircle public void show( ) System.out.println(“*“); ,/ appl5_8.java 此文件存放在pack3a文件夹内 package pack3a; import pack3b.CCircle; public class appl5_8 pub

22、lic static void main(String args ) CCircle cir=new CCircle(); cir.show(); , import 包名.* ;,/ 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 public sta

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

24、变量必须是public、static和final,这是java系统默认的规定,所以接口的成员变量也可以没有任何修饰符,其作用是完全一样的。接口的抽象方法必须是public和abstract,这也是java系统默认的规定,所以接口的抽象方法也可以没有任何修饰符,其作用是完全一样的。,interface iShape2D /定义接口 final double pi=3.14; /数据成员一定要初始化 abstract void area( ); /抽象方法 ,(三)实现接口,(三)实现接口,类修饰符 class extends implements 数据类型 成员变量名称; 返回值的数据类型 方法

25、名称(参数1,参数2,) 程序语句; return 表达式; ,/ 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

26、 radius; public CCircle(double r) radius=r; public void area( ) / 定义area( )的处理方式 System.out.println(“area=“+pi*radius*radius); ,public class appl5_9 public static void main(String args) CRectangle rect=new CRectangle(5,10); rect.area( );/调用CRectangle类里的area() CCircle cir=new CCircle(2.0); cir.area()

27、; / 调用CCircl类里的area() ,(四)接口实现多重继承,/ appl5_10, 实现两个以上的接口 interface iShape2D / 定义iShape2D接口 final double pi=3.14; abstract void area(); interface iColor / 定义iColor接口 abstract void setColor(String str); ,class CCircle implements iShape2D,iColor / 实现iShape2D与iColor接口 double radius; String color; public

28、 CCircle(double r) radius=r; public void setColor(String str) / 定义iColor接口里的setColor() color=str; System.out.println(“color=“+color); public void area( ) / 定义iShape2D接口里的area() method System.out.println(“area=“+pi*radius*radius); ,public class appl5_10 public static void main(String args) CCircle cir; cir=new CCircle(2.0); cir.setColor(“Blue“); / 调用CCircl类里的setColor() method cir.area(); / 调用CCircl类里的area() method ,作业,作业: P121 E1、2、3、4、5、6、8、10、11、14、15、19、20、21,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1