《java第5章继承与多态》由会员分享,可在线阅读,更多相关《java第5章继承与多态(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.setCircle(“Blue”,4.0); ,(四)构造方法的重载,(四)构造方法的重载,构造方法的重载是指同一个类中存在着若干个具有不同参数列表的构造方法。,三、包,三,包,(一)文件的分割,(一)文件的分割,/appl5_6 文件分割 class CCircle public void sho