第4章继承和多态.ppt
《第4章继承和多态.ppt》由会员分享,可在线阅读,更多相关《第4章继承和多态.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象的程序设计第第 4 章章 继承和多态继承和多态雷擎雷擎对外经济贸易大学信息学院对外经济贸易大学信息学院面向对象的程序设计对外经济贸易大学 雷擎content4.1 什么是继承什么是继承4.2 抽象类与抽象方法抽象类与抽象方法4.3 接口接口4.4 多态性多态性实验:继承与多态实验:继承与多态面向对象的程序设计对外经济贸易大学 雷擎4.1 什么是继承什么是继承o 由已有的类创建新类由已有的类创建新类n 是面向对象程序设计的基石之一是面向对象程序设计的基石之一o 新类拥有新类拥有 所继承的已有类的功能所继承的已有类的功能o 子类是父类的特殊化子类是父类的特殊化o 继承机制可以提高程序的抽象
2、程度,提高代继承机制可以提高程序的抽象程度,提高代码的可重用性码的可重用性面向对象的程序设计对外经济贸易大学 雷擎继承的概念继承的概念o 基类基类(base class)n 也称超类也称超类(superclass)n 是已有的类,被直接或间接继承是已有的类,被直接或间接继承o 派生类派生类(derived-class)n 也称子类也称子类 (subclass)n 是新类,继承已有类后得到的类是新类,继承已有类后得到的类面向对象的程序设计对外经济贸易大学 雷擎继承的概念继承的概念o 继承的概念继承的概念n 父类(超类、基类):描述具有某些共同个性父类(超类、基类):描述具有某些共同个性的类。的类
3、。n 子类(派生类):在父类的基础上,对其中某子类(派生类):在父类的基础上,对其中某一部分对象的特殊共性进一步描述,则得到此一部分对象的特殊共性进一步描述,则得到此父类的子类(派生类)。父类的子类(派生类)。n 子类的对象拥有其父类全部或部分属性与方法子类的对象拥有其父类全部或部分属性与方法的定义过程,称为子类对父类的继承。的定义过程,称为子类对父类的继承。面向对象的程序设计对外经济贸易大学 雷擎is_a关系关系o 子类对象与父类对象的关系子类对象与父类对象的关系n 存在存在“IS A”(或或“is kind of”)的关系的关系undergraduatestudent面向对象的程序设计对外
4、经济贸易大学 雷擎面向对象的程序设计对外经济贸易大学 雷擎继承的特点继承的特点o 类的继承允许多层的继承关系,也就是子类类的继承允许多层的继承关系,也就是子类可以有它自己的子类。可以有它自己的子类。o Java所有的类都直接或间接继承于所有的类都直接或间接继承于Object类,所有类类型都可以当做类,所有类类型都可以当做Object类型使类型使用。用。o Java的继承层次是无限的。的继承层次是无限的。面向对象的程序设计对外经济贸易大学 雷擎4.1 什么是继承什么是继承o 4.1.1 继承的语法继承的语法o 4.1.2 成员的继承成员的继承o 4.1.3 覆盖和隐藏覆盖和隐藏o 4.1.4 t
5、his和和super的用法的用法o 4.1.5 final的意义的意义面向对象的程序设计对外经济贸易大学 雷擎4.1.1 继承的语法继承的语法public class子类名子类名 extends 父类名父类名 /子类自身子类自身构造方法的定义构造方法的定义 /子类自身成员属性的定义子类自身成员属性的定义 /子类自身成员方法的定义子类自身成员方法的定义 .o Java只能做单继承只能做单继承面向对象的程序设计对外经济贸易大学 雷擎例:继承的语法例:继承的语法class Person private String id;private String name = 宝宝宝宝;private bool
6、ean gender;private Date birthday;/private final Date birthday;public Person ()/have to set value to birthday/if delete this constructor, subclass have problems.public Person(String id, String name)this.id = id;this.name = name;this.gender = false; this.birthday = 面向对象的程序设计对外经济贸易大学 雷擎class Student ex
7、tends Person int stuId;String name;Date enrolDate;public Student()public Student(String id, String name, Date date)super(id, name);面向对象的程序设计对外经济贸易大学 雷擎public class Undergraduate extends Student String collegeName;String major;public Undergraduate().public Undergraduate(String id, String name)super(i
8、d, name);面向对象的程序设计对外经济贸易大学 雷擎4.1.2 成员的继承成员的继承o 子类可以继承父类的属性,初始值为父类中子类可以继承父类的属性,初始值为父类中该属性的初值该属性的初值o 子类不能直接访问父类中非子类不能直接访问父类中非private的属性的属性,但可以通过调用父类的,但可以通过调用父类的public方法访问方法访问private属性。属性。o 子类可以继承父类的成员方法,但无法直接子类可以继承父类的成员方法,但无法直接访问父类的访问父类的private方法。方法。面向对象的程序设计对外经济贸易大学 雷擎子类对父类成员属性和方法的继承子类对父类成员属性和方法的继承o
9、子类和父类在同一包中子类和父类在同一包中n 子类可以访问父类中不是子类可以访问父类中不是private的成员变量的成员变量和方法和方法o 子类和父类在不同包中子类和父类在不同包中n 子类可以访问父类中子类可以访问父类中public和和protected成员成员变量和方法,不能访问默认和变量和方法,不能访问默认和private的成员的成员变量和方法变量和方法面向对象的程序设计对外经济贸易大学 雷擎例:子类对父类的继承例:子类对父类的继承class ParentClass private int x; / 声明私有成员声明私有成员protected int y;/ 声明保护成员声明保护成员int
10、z;/ 声明缺省成员声明缺省成员public int w; / 声明公有成员声明公有成员 public void parentmethod() System.out.println(call parent class function: parentmethod();面向对象的程序设计对外经济贸易大学 雷擎class SonClass extends ParentClass / 派生类中不能继承父类中的私有成员,其他成员均可继承派生类中不能继承父类中的私有成员,其他成员均可继承public void displayprivate() / 引用父类中私有成员引用父类中私有成员/ System.o
11、ut.println(X=+x); public void displayprotected() / 引用父类中保护成员引用父类中保护成员System.out.println(Y= + y); public void displaypublic() / 引用父类中公有成员引用父类中公有成员System.out.println(W= + w); public void displaydefault() / 引用父类中的默认成员引用父类中的默认成员System.out.println(Z= + z); ; 面向对象的程序设计对外经济贸易大学 雷擎class SonClass1 extends Pa
12、rentClass ;public class Test4_1 public static void main(String args) ParentClass parent = new ParentClass();SonClass son = new SonClass();SonClass1 son1 = new SonClass1();/ 三句执行的效果一样,三句执行的效果一样,son、son1中没有自己定义中没有自己定义parentmethod()方法,它继承了父类中的方法,它继承了父类中的parent.parentmethod();son.parentmethod();son1.par
13、entmethod(); 面向对象的程序设计对外经济贸易大学 雷擎构造方法的继承构造方法的继承o 有继承时的构造方法遵循以下的原则有继承时的构造方法遵循以下的原则n 子类不能从父类继承构造方法子类不能从父类继承构造方法n 好的程序设计方法是在子类的构造方法中调用好的程序设计方法是在子类的构造方法中调用某一个父类构造方法,调用语句必须出现在子某一个父类构造方法,调用语句必须出现在子类构造方法的第一行,可使用类构造方法的第一行,可使用super关键字关键字n 如子类构造方法的声明中没有明确调用父类构如子类构造方法的声明中没有明确调用父类构造方法,则系统在执行子类的构造方法时会自造方法,则系统在执行
14、子类的构造方法时会自动调用父类的默认构造方法(即无参的构造方动调用父类的默认构造方法(即无参的构造方法)法)面向对象的程序设计对外经济贸易大学 雷擎构造方法的继承构造方法的继承o 子类的构造方法会子类的构造方法会自动调用父类自动调用父类的无参构造的无参构造方法。方法。o 带参数的构造方法带参数的构造方法不会不会被子类继承,也不会被子类继承,也不会自动调用。在子类中,对父类有参构造方法自动调用。在子类中,对父类有参构造方法可以使用可以使用super显示调用显示调用面向对象的程序设计对外经济贸易大学 雷擎初始化初始化o 回顾:类的构造方法回顾:类的构造方法Case Study:Undergradu
15、ate.javao 在构造方法内调用构造方法:在构造方法内调用构造方法:this 的使用的使用n 可以用可以用this在一个构造方法内调用另一个构造在一个构造方法内调用另一个构造方法,但不可调用两个;方法,但不可调用两个;n 若有构造方法调用,必须是第一步。若有构造方法调用,必须是第一步。面向对象的程序设计对外经济贸易大学 雷擎父类与子类传递构造函数父类与子类传递构造函数o 缺省构造函数缺省构造函数Case Study: Catoon.javao 传递参数:传递参数:super()Case Study: AboutSubClassConstructor面向对象的程序设计对外经济贸易大学 雷擎4
16、.1.3 覆盖和隐藏覆盖和隐藏o 子类只能继承父类中子类只能继承父类中n 访问控制权限为访问控制权限为public、protected和和default的成员变量和方法的成员变量和方法o 子类不能继承子类不能继承n 访问权限为访问权限为private的成员变量和方法的成员变量和方法o 子类不能继承父类中的静态属性,但可以通子类不能继承父类中的静态属性,但可以通过过super进行操作进行操作面向对象的程序设计对外经济贸易大学 雷擎方法的覆盖方法的覆盖o 成员方法的覆盖成员方法的覆盖n 当子类中定义了与父类当子类中定义了与父类同名、同参数和同返回同名、同参数和同返回值类型值类型的成员方法,则父类的
17、成员方法被重写的成员方法,则父类的成员方法被重写,子类的方法,子类的方法覆盖覆盖了父类中的方法,称为方法了父类中的方法,称为方法的隐藏的隐藏n 方法重写,是运行时多态的基础方法重写,是运行时多态的基础o 在子类中调用同名的方法时,是调用它自己在子类中调用同名的方法时,是调用它自己定义的方法;若要使用父类中被覆盖的方法定义的方法;若要使用父类中被覆盖的方法,可以使用,可以使用super关键字。关键字。面向对象的程序设计对外经济贸易大学 雷擎例:方法的覆盖例:方法的覆盖public class SuperClass void print() System.out.println(This is t
18、he superclass!);public static void main(String args) SuperClass sup = new SuperClass();sup.print();SubClass sub = new SubClass();sub.print();class SubClass extends SuperClass void print() System.out.println(This is the subclass!);面向对象的程序设计对外经济贸易大学 雷擎成员变量的隐藏成员变量的隐藏o 成员变量的隐藏成员变量的隐藏n 当子类中定义了与父类同名的成员变量,
19、则父当子类中定义了与父类同名的成员变量,则父类的成员变量被隐藏类的成员变量被隐藏n 在子类执行从父类继承的方法时,使用在子类执行从父类继承的方法时,使用this可可以访问本类中的实例变量,关键字以访问本类中的实例变量,关键字super可以可以访问被隐藏的父类实例变量。访问被隐藏的父类实例变量。面向对象的程序设计对外经济贸易大学 雷擎4.1.4 this和和super的用法的用法o this: 指当前对象,其调用格式为:指当前对象,其调用格式为:n this.成员变量成员变量n this.成员方法成员方法n this( parameters list)o super:指父类对象,其调用格式为:指
20、父类对象,其调用格式为:n super.成员变量成员变量n super.成员方法成员方法n super( parameters list)面向对象的程序设计对外经济贸易大学 雷擎this的用法的用法o 1 返回当前对象的引用返回当前对象的引用o 2 在实例变量和局部变量同名的时候访问当在实例变量和局部变量同名的时候访问当前对象的实例变量前对象的实例变量o 3 在类的构造方法中调用这个类的其他的构在类的构造方法中调用这个类的其他的构造方法造方法o 4 不能在静态方法或静态代码块中使用不能在静态方法或静态代码块中使用this面向对象的程序设计对外经济贸易大学 雷擎例:例:this的用法的用法pub
21、lic class PersonA private String name;private int age;PersonA()this(No name,0);System.out.println(In PersonA constuctor);面向对象的程序设计对外经济贸易大学 雷擎PersonA(String name, int age) setName(name); / 你可以加上你可以加上this来调用方法来调用方法,像这样:,像这样:this.setName(name);但这并不是必须但这并不是必须的的this.setAge(age);this.print();System.out.pr
22、intln(In PersonA constuctor with parameters);面向对象的程序设计对外经济贸易大学 雷擎public void setName(String name) this.name = name;/ 此处必须指明你要引用成此处必须指明你要引用成员变量员变量public void setAge(int age) this.age = age;public void print() System.out.println(Name= + name + Age= + age);/ 在此行中并不需要用在此行中并不需要用this,因为,因为没有会导致混淆的东西没有会导致混
23、淆的东西面向对象的程序设计对外经济贸易大学 雷擎super的用法的用法o 1 调用被子类隐藏的父类的实例变量调用被子类隐藏的父类的实例变量 o 2 调用父类的方法调用父类的方法o 3 在子类里面调用父类的构造方法在子类里面调用父类的构造方法 如果不如果不显示的调用则默认的调用父类无参的构造方显示的调用则默认的调用父类无参的构造方法如果父类没有无参的构造方法这程序报错法如果父类没有无参的构造方法这程序报错o 4 父类中定义为父类中定义为private的变量和方法,的变量和方法,子类不能继承,使用子类不能继承,使用super也无法访问。也无法访问。面向对象的程序设计对外经济贸易大学 雷擎例:例:s
24、uper的用法的用法public class PersonB extends PersonApublic void print() System.out.println(DemoSuper:);super.print();public static void main(String args) PersonB b = new PersonB();b.print();面向对象的程序设计对外经济贸易大学 雷擎public class PersonC extends PersonApublic PersonC()/super();public PersonC(String name, int age
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承
限制150内