Java面向对象程序第6章.ppt
《Java面向对象程序第6章.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序第6章.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 Java的继承与多态 Java教材编写组教学目标通过父类创建子类理解子类和父类构造方法的执行顺序掌握实现方法覆盖的方法掌握super、this、final关键字意义及使用方法理解Object类的作用以及类的常用方法了解多态的意义掌握重载的使用方法概述继承、封装、多态是面向对象程序设计的3个重要特性。通过继承,以既有类为基础,派生出新类,达到代码重用的目的;通过封装,对类对象的数据成员进行访问控制,起到数据保护的作用;通过多态,程序能够动态的匹配同名方法,使程序更加灵活。继承的基本概念继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个公有属性的一般类,根据一般类再创建一个具有特
2、殊属性的新类。新类继承一般类的状态和行为,并根据需要增加它为自己的新的状态和行为。由此继承而得到的类为子类,被继承的类为父类(超类)。Java不支持多继承(子类只能有一个父类)。人学生教师教辅人员外语系学生计算机系学生旅游系学生计算机网络专业学生软件技术专业学生计算机多媒体专业学生计算机教育专业学生class Person /定义Person类protected String name;protected String sex;protected int age;Person类的方法 class Student extends Person private String department;
3、/系别private String specialty;/专业Student类的方法 通过Person类派生出Student类。Student类继承自Person类,拥有Person类的所有方法和属性。通过关键字extends实现继承class Person /定义Person类protected String name;/姓名protected String sex;/性别protected int age;/年龄public void register(String n,String s,int a)/设置数据成员 name=n;sex=s;age=a;String getName()/获
4、取姓名return name;String getSex()/获取性别return sex;int getAge()/获取年龄return age;public void showMe()/显示人员信息System.out.println(姓名:+name+,性别:+sex+,年龄:+age);/Ex6_1.java Person类的定义class Student extends Person /定义Student(学生)类,是Person类的子类。private String department;/系别private String specialty;/专业public void stud
5、entRegister(String n,String s,int a,String dep,String spe)/设置数据成员 register(n,s,a);department=dep;specialty=spe;String getDepartment()/获取学生所在系return department;String getSpecialty()/获取学生所学专业return specialty;public void showStudent()/显示学生类数据成员System.out.println(姓名:+name+,性别:+sex+,年龄:+age+,系别:+departme
6、nt+,专业:+specialty);通过extends关键字,由Person类派生出Student类public class Ex6_1public static void main(String args)Student student1=new Student();student1.studentRegister(张三,男,18,计算机,软件开发);student1.showStudent();运行结果:姓名:张三,性别:男,年龄:18,系别:计算机,专业:软件开发程序分析:本例中的Person类是父类,它派生出子类Student类。Student类继承了Person类的name属性,s
7、ex属性,age属性,GetName()方法,GetSex(),ShowMe()方法等。同时,Student类对Person类进行了功能扩展,又增加了department,specialty属性和GetDepartment()、GetSpecialty()、ShowStudent()等方法。说明继承能够使子类拥有(继承)父类的非私有属性和方法(即可以继承public、protected和默认访问属性的成员),而不需要在子类定义时重新定义父类中的这些同名属性和方法。当修改父类中的某个属性和方法时,子类中也会同样得到修改。这样,就可以省去重复定义成员的烦琐,实现代码重用,同时提高了代码的可维护性。
8、一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和方法。一个子类可以继承它的父类(或祖先类)中的属性和方法,这些属性和方法在子类中不必定义,子类中还可以定义自己的属性和方法。创建子类的语法格式 访问权限 class SonClass(子类名)extends ParentClass(父类名)类体定义;“访问权限”是指public,private,protected等;SonClass是子类名;ParentClass是父类名;这两个类名通过关键字extends联系在一起,形成继承关系 构造方法的继承 通常在定义一个新类的时候,会定义一个相应的构造方法,用来对数据成员进行
9、一些初始化。构造方法是在创建对象时自动调用,并执行构造方法的内容,构造方法不需从程序直接调用,而是在对象产生时自动执行。构造方法没有返回值,名称必须与类的名称相同之外。假如在一个类中定义了构造方法,而由这个类派生出来的子类也定义了构造方法,那生成新的子类对象的时候,构造方法是怎样执行的呢?/Ex6_2.java class Person /定义Person类protected String name;/姓名protected String sex;/性别protected int age;/年龄public Person()System.out.println(Person()construc
10、tor is called!);public void register(String n,String s,int a)/设置数据成员name=n;sex=s;age=a;public void showMe()/显示人员信息System.out.println(姓名:+name+,性别:+sex+,年龄:+age);Person类的构造方法,用于输出”Person()constructor is called!”class Student extends Person /定义Student(学生)类,是Person类的子类private String department;/系别priva
11、te String specialty;/专业public Student()/定义学生类的构造方法 System.out.println(Student()constructor is called!);public void studentRegister(String n,String s,int a,String dep,String spe)register(n,s,a);department=dep;specialty=spe;public void showStudent()/显示学生类数据成员System.out.println(姓名:+name+,性别:+sex+,年龄:+a
12、ge+,系别:+department+,专业:+specialty);子类Student类的构造方法,用于输出“Student()constructor is called!”public class Ex6_2 public static void main(String args)Student student1=new Student();student1.studentRegister(张三,男,18,计算机,软件开发);student1.showStudent();运行结果:Person()constructor is called!Student()constructor is c
13、alled!姓名:张三,性别:男,年龄:18,系别:计算机,专业:软件开发Person类定义了一个无参构造方法,构造方法运行时将输出“Person()constructor is called!”。通过Person类派生出了Student类,Student类中也定义了一个无参构造方法,构造方法运行时将输出“Student()constructor is called!”。通过输出结果,明显看出,创建Student对象时,在执行Student类的构造方法之前,调用了Person类的构造方法。这样的执行顺序可以保证子类对象从父类对象继承得到的成员能够进行正确的初始化。覆盖 覆盖是指在子类中,利用完
14、全相同的方法名,返回类型和参数,重新实现父类的某一成员方法。当需要对象响应同样的方法,但与超类中原来的方法有不同行为时,需要超越(抑制)该方法。用新的方法体取代原来的方法,但使用相同的方法名在Ex6_1.java中,Person类通过showMe()方法显示人员信息,而子类Student类通过showStudent()方法显示人员信息。这两个方法都是用来显示人员信息,只是显示的项目不同而已。实际上,在定义Student类方法的时候,可以定义showMe()方法将父类的showMe()方法覆盖。/Ex6_3.javaclass Person /定义Person类protected String
15、name;/姓名protected String sex;/性别protected int age;/年龄public Person()public Person(String n,String s,int a)/构造方法 name=n;sex=s;age=a;public void showMe()/显示人员信息 System.out.println(姓名:+name+,性别:+sex+,年龄:+age);父类Person中定义了showMe()方法,用来输入类对象基本信息class Student extends Person /定义Student(学生)类,是Person类的子类 pri
16、vate String department;/系别private String specialty;/专业public Student(String n,String s,int a,String dep,String spe)name=n;sex=s;age=a;department=dep;specialty=spe;public void showMe()/显示学生类数据成员 System.out.println(姓名:+name+,性别:+sex+,年龄:+age+,系别:+department+,专业:+specialty);由Person类派生出的Student类中重新定义了sh
17、owMe()方法,覆盖了父类Person类的showMe()方法。public class Ex6_3 public static void main(String args)Person person1=new Person(王兰,女,16);person1.showMe();Student student1=new Student(张三,男,18,计算机,软件开发);student1.showMe();运行结果:姓名:王兰,性别:女,年龄:16姓名:张三,性别:男,年龄:18,系别:计算机,专业:软件开发子类中所定义的showMe()方法覆盖了父类的showMe()方法。当创建Person
18、类对象的时候,Person类的showMe()方法将会执行;当创建Student类对象的时候,Student类的showMe()方法将会执行。例6.1程序Ex6_1.java中,Person类对象和Student类对象分别调用showMe()和showStudent()方法才能显示各自信息。本例中,Person类对象和Student类对象,都可以使用showMe()方法显示信息。利用“覆盖”技术,在子类中可定义和父类中的名称、参数个数与数据类型均完全相同的方法,用以取代父类中原有的方法。super 关键字的使用在Java的覆盖机制中,子类中的同名成员变量或方法隐藏了超类的成员变量或方法,如果在
19、子类中,希望使用父类中的那些被子类覆盖的成员或方法,就需要借助于super这个关键字。另外,若在子类中调用父类的构造方法,也需要利用super实现。super使用方法如下:super.成员变量名称 /使用父类的成员变量super.方法名称 /使用父类的方法this关键字的使用super是Java语言的关键字,用来表示直接父类。为了区别,Java提供this关键字访问当前对象。当在一个类中要明确指出使用当前对象本身的变量或方法时,就可以使用this关键字代表当前类。this的另一个用途是调用当前对象的另一个构造方法。假如一个类中定义了几个构造方法,可以使用this关键字引用当前类中定义的其他构造
20、方法。this使用方法如下:this.成员变量名称 /使用自身成员变量this.方法名称 /使用当前类的方法class Person /定义Person类 protected String name;/姓名 protected String sex;/性别 protected int age;/年龄 public void register(String n,String s,int a)/设置数据成员name=n;sex=s;age=a;public void showMe()/显示人员信息 System.out.println(姓名:+name+,性别:+sex+,年龄:+age);/Ex
21、6_4.java 类Person中定义了3个成员和2个方法register()和showMe()。在方法showMe()中,可以使用this.name来替换name,this代表Person类对象本身。class Student extends Person /定义Student(学生)类,是Person类的子类 private String department;/系别 private String specialty;/专业 public void studentRegister(String n,String s,int a,String dep,String spe)super.reg
22、ister(n,s,a);/调用父类方法this.department=dep;/访问自身成员变量this.specialty=spe;/访问自身成员变量 public void showStudent()/显示学生类数据成员System.out.println(姓名:+super.name+,性别:+super.sex+,年龄:+super.age+,系别:+this.department+,专业:+this.specialty);方法studentRegister()中,使用super表示父类对象,super.register()即调用了父类对象方法register();使用this表示当
23、前类对象,this.department即引用了当前类对象成员department。public class Ex6_4public static void main(String args)Student student1=new Student();student1.studentRegister(张三,男,18,计算机,软件开发);student1.showStudent();运行结果:姓名:王兰,性别:女,年龄:16姓名:张三,性别:男,年龄:18,系别:计算机,专业:软件开发程序分析:Student类中使用super.register()的方式访问父类中定义的register()方法
24、,而访问本身的数据成员,则通过this关键字实现。通常,this关键字可以省略。使用super除了可以访问父类的普通方法外,还可以访问父类的构造方法。/Ex6_5.java class Person /定义Person类 protected String name;/姓名protected String sex;/性别protected int age;/年龄public Person()/构造方法 public Person(String n,String s,int a)/构造方法 name=n;sex=s;age=a;public void showMe()/显示人员信息 System.
25、out.println(姓名:+name+,性别:+sex+,年龄:+age);Person类中定义了2个构造方法,这是方法的重载。程序在调用时会根据实参的个数自动匹配相应的构造方法。class Student extends Person /定义Student(学生)类,是Person类的子类 private String department;/系别 private String specialty;/专业 public Student(String n,String s,int a,String dep,String spe)/定义学生类的构造方法super(n,s,a);/调用了父类的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 程序
限制150内