《类的继承性》ppt课件

上传人:san****019 文档编号:83799817 上传时间:2019-03-01 格式:PPT 页数:68 大小:2.21MB
返回 下载 相关 举报
《类的继承性》ppt课件_第1页
第1页 / 共68页
《类的继承性》ppt课件_第2页
第2页 / 共68页
《类的继承性》ppt课件_第3页
第3页 / 共68页
《类的继承性》ppt课件_第4页
第4页 / 共68页
《类的继承性》ppt课件_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《《类的继承性》ppt课件》由会员分享,可在线阅读,更多相关《《类的继承性》ppt课件(68页珍藏版)》请在金锄头文库上搜索。

1、访问控制权限了解,第3讲 面向对象编程(高级篇),面向对象编程(基础篇)知识回顾,主要内容,3.1 继承性 3.2 多态性 3.3 抽象类 3.4接口 3.5内部类和匿名类,3.1 继承的作用 3.2 子类对象的创建 3.3 在子类中访问父类的成员 3.4 覆盖父类的方法,3.1.1 继承,为什么引入继承的特性?,模仿人类的思维方式人类的继承性,Person类 class Person private String name; private int age; public String getName() return name; public void setName(String n)

2、name=n; public int getAge() return age; public void setAge(int a) age=a; ,Student类 class Student private String name; private int age; private String school; public String getName() return name; public void setName(String n) name=n; public int getAge() return age; public void setAge(int a) age=a; pu

3、blic String getSchool return school; public void setSchool(String s) school=s; ,3.1.1 继承,为什么引入继承的特性?,模仿人类的思维方式人类的继承性,2.程序的代码重用性少写代码,继承关系格式:,class 父类 class 子类 extends 父类 ,试验!eXTdEMO1.JAVA eXTdEMO2.JAVA,QQ牧场的设计,目的:了解在真实系统中进行设计时如何进行继承层次的设计?, 找出对象的共同属性和行为,这个程序必须能够在任何时候加入新类型的动物。 首先要辨别出所有动物都有的、抽象的共同特征,然后以

4、这些共同特征设计出能够让所有动物加以扩充的类。,考虑: 这6种动物有什么共同特点? 这些类型有什么相关性?, 找出对象的共同属性和行为,5个实例变量: picture:动物JPEG图像的名称 food:此动物所吃的食物(meat/grass) hunger:代表饥饿程度的int值。会根据动物吃了多少食物而改变。 boundaries:代表动物活动范围区域的长宽。 location:动物在活动区域中的位置。 4个实例方法: makeNoise():动物发出声音的行为和程序。 eat():动物遇到食物时的行为程序。 sleep():睡眠的行为程序。 roam():不在进食或睡眠时的行为程序。, 设

5、计代表共同状态与行为的类,决定子类是否需要让某项行为有特定的不同的运行方式,决定子类是否需要让某项行为有特定的不同的运行方式,寻找更多抽象化的机会,完成类的继承层次,完成类的继承层次,寻找更多抽象化的机会,决定子类是否需要让某项行为有特定的 不同的运行方式, 设计代表共同状态与行为的类,如何进行继承层次的设计 -自下而上的设计, 找出对象的共同属性和行为,子类对象调用成员的原则,最低阶原则, 添加子类的新成员, 改造父类的成员, 继承父类的成员,已知父类如何进行子类设计 -自上而下的设计,访问控制权限了解, 添加子类的新成员, 改造父类的成员, 继承父类的成员,已知父类如何进行子类设计 -自上

6、而下的设计,3.1.2 子类对象的创建,一、子类对象的实例化过程 二、super的作用,3.1.2 子类的创建,一、子类对象的实例化过程 class Person public Person() System.out.println(“父类构造”); class Student public Student() System.out.println(“子类构造”); ,3.1.2 子类对象的创建,一、子类对象的实例化过程 public class TestDemo11 public static void main(String args) Student stu=new Student();

7、 ,运行结果:,?,3.1.2 子类对象的创建,一、子类对象的实例化过程 1、 先自动调用父类构造函数(父类中的无参构造函数) 2、然后调用子类构造函数 注意:如果父类中有多个构造方法时,如何才能调用父类中某个特定的构造方法呢? 其做法是在子类的构造方法中通过super()来调用父类特定的构造方法。,3.1.2 创建子类,二、super()、super() class Person private String name; private int age; public Person() System.out.println(“调用Person类的无参构造方法”); public Peron(

8、String name,int age) System.out.println(“调用了Person类的有参构造方法”); this.name=name; this.age=age; public void show() System.out.println(“姓名:”+name+”年龄:”+age); ,3.1.2 子类对象的创建,class Student extends Person private String department; public Student() System.out.println(“Student 无参构造”); public Student(String n

9、ame,int age,String dep) super(name,age); department=dep; System.out.println(“我是”+department+”的学生”); System.out.println(“Student有参构造”); ,3.1.2 子类对象的创建,public class TestDemo1 public static void main(String args) Student stu1=new Student(); Student stu2=new Student(“李四”,23,”计算机系”); stu1.show(); stu2.sh

10、ow(); ,3.1.2 子类对象的创建,省略红色字体super(name,age),父类中的构造方法哪个会被调用? 子类构造方法中调用父类构造方法的super 语句位置有没有限制? 如果父类中只定义了有参的构造方法,而子类的构造方法中并没有显式的用super()来调用父类中特定的构造方法,程序此时会有问题吗? 找出this和super的相同点和不同点。,思考!! 找出继承中构造方法的调用规则,3.1.3 成员变量的隐藏和方法的覆写,(1)当在子类中定义的成员变量和父类中的成员变量同名时,此时称子类的成员变量隐藏了父类的成员变量。,改造父类的成员,(2)当子类中定义了一个方法,并且这个方法的名

11、字,返回类型,参数个数以及类型和父类的某个方法完全相同时,父类的这个方法将被隐藏,这时我们说重写了父类的方法。,子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。,3.1.3 成员变量的隐藏和方法的覆写,例如下面的这段程序就是这样的情况: class SuperClass /父类 int y; void setY() y=0; class SubClass extends SuperClass int y; / 父类变量y被隐藏 void setY() / 重写父类的方法setY() y=1; ,public TestDemo3 public static voi

12、d main(String args) SubClass ss=new SubClass(); ss.setY(); ,子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员变量,或在重写的方法中使用父类中被重写的方法以简化代码的编写,这时就要访问父类的成员变量或调用父类的方法,Java中通过super来实现对父类成员的访问。this用来引用当前对象,与this类似,super用来引用当前对象的父类。 super的使用可以分为下面三种情况: 1)用来访问父类被隐藏的成员变量,如: super.y 2)用来调用父类中被重写的方法,如: super.setY() 3)用来调用父类的

13、构造方法,如: super(paramlist);,3.1.3 成员变量的隐藏和方法的覆写,思考:方法的重载与覆写非常类似,找出它们的区别!,课后讨论,讨论二类的继承性与多态性(1) 主题一:方案设计分析 主题三:知识原理掌握构造方法的重载 思考: (1)找出父类向子类派生时,构造方法的调用规律 (2)找出方法的重载与重写的区别,主题一:方案设计分析,写出你所能想到的所有二维、三维形状,并用它们组成一个形状层次结构。层次结构把Shape当作超类,并从中派生出TwoDimensionalShape类和ThreeDimensionalShape类。设计这个层次结构,并定义它的所有类。画出相应的类层

14、次结构图。接下来考虑如果将Shape类变成abstract超类,TwoDimensionalShape类和hreeDimensionalShape类也是abstract类。进行相应的派生后,要求在第三层的类中计算出每个类对应对象的面积和体积。,主题三:知识原理掌握构造方法的重载,建立一个人类(Person)和学生类(Student),功能要求如下: (1)Person中包含4个保护型的数据成员name、addr、sex、age,表示姓名、地址、性别和年龄。用一个4参构造方法、一个两参构造方法、一个无参构造方法来实例化对象,用一个输出方法显示4种属性。 (2)Student类继承Person类,

15、并增加输出成员math、english存放数学、英语成绩。用一个6参构造方法、一个两参构造方法、一个无参构造方法来实例化对象,另外重写输出方法用于显示6种属性。,第3章 面向对象高级程序设计,3.1 继承 3.2多态性 3.3 抽象类和抽象方法 3.4接口 3.5内部类和匿名类,3.2多态性,多态(Polymorphism)的意思就是用相同的名字来定义不同的方法。在Java中,普通类型的多态为重载,这就意味着可以使几个不同的方法使用相同的名字,这些方法以参数的个数不同、参数的类型不同等方面来进行区分,以使得编译器能够进行识别。 也可以这样讲,重载是同一个方法具有不同的版本,每个版本之间在参数特

16、征方面有差异。重载是Java实现多态性的方式之一。 例如:family()方法可以有三个版本,如下: family() family(String ch) address=ch; family(String ch,float n) address=ch; pay=n; 这些方法并存于程序中,编译时,编译器根据实参的类型和个数来区分从而调用那个方法。如果这些方法作为函数或过程同时出现在其它语言的程序中,如C,那将导致灾难性的错误。,3.2多态性,【例3-6】构造方法重载的例子 class person String name=“Johnson“; / 姓名 int age=45; / 年龄 per

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号