利用已有成果继承与多态

上传人:宝路 文档编号:48813341 上传时间:2018-07-20 格式:PPT 页数:58 大小:725.64KB
返回 下载 相关 举报
利用已有成果继承与多态_第1页
第1页 / 共58页
利用已有成果继承与多态_第2页
第2页 / 共58页
利用已有成果继承与多态_第3页
第3页 / 共58页
利用已有成果继承与多态_第4页
第4页 / 共58页
利用已有成果继承与多态_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《利用已有成果继承与多态》由会员分享,可在线阅读,更多相关《利用已有成果继承与多态(58页珍藏版)》请在金锄头文库上搜索。

1、第5章 利用已有成果:继承与多态n思考:在编写大型应用程序的时候,如果所定义的 类已经被使用,应如何提高程序的可维护性?既要 保证程序修改后不影响使用,又要对程序的功能不 断扩充。1、直接改动源代码,使之实现新的功能 2、复制原有代码,对复制的代码进行改动5.1继承n由此产生的一些问题:一、修改过程中很容易产生一些新的错误,导致原有 程序运行不正确; 二、复制代码的时候可能产生错误,而且使程序的 可移植性和重用性变差。5.1继承n1.继承概念的提出面向对象的方法与人类的思维方法相似,对象就是 对事物特点的必要抽象。人在认识事物的时候也经 过抽象,并且抽象是分层次的。在程序中定义类的时候,如果发

2、现它的某些成员 (变量及方法)已经在另一个类中定义过了, 如果再定义就显得累赘。5.1继承n2.继承的要点n新类必须在已有类的基础上构造。n在已有类的基础上构造新类的过程称为派生。n派生出的新类称为已有类的子类。已有类称为超类 (父类)。n子类继承父类的方法和属性。父类子类继承 extends5.1继承n3.继承的特点n继承是一种由已有的类创建新类的机制,是面向对 象程序设计的基石之一。n继承体现了软件的复用,子类继承父类: v 父类中的属性不需要再定义。 v父类中的方法不需要再重新编写 。n子类继承父类的非私有属性和方法,还可以定义新 的属性和方法,改写父类的方法。 v 子类是在父类的基础上

3、,做一些个性化的定义。nJava中每个类都有父类。隐含为java.lang包中的 Object类。5.1继承5.1继承关于改写父类方法与子类个性化定义能继承?不能 继承?类的继承树学生小学生中学生大学生研究生本科生在“学生“类中定义好各类 学生共性的内容,各子类 中只需定义自己特有的内 容。 父类“学生“类实际上是对 各类学生的概括和抽象。类的继承树图形三维图形二维图形园形三角形矩形正方形圆锥体球体立方体各种电话卡类及其间的继承关系n4.继承的定义nJava中通过关键字extends来定义两个类之间的继 承关系,extends后面是父类,前面是新定义的子 类:n modifier class

4、className extends superClass5.1继承n实例:n public class Automobile extends Vehicle n / Vehicle是父类, Automobile是子类n注意:子类、父类的关系是相对而言的!如:npublic class Car extends Automobile n/ Automobile是父类, Car是子类5.1继承n继承有什么作用?n(1)继承能够使子类拥有父类的非私有属性和方 法,而不需在子类重新定义。n(2)子类既可以保持原有的属性和方法,也可以 对从父类那里继承的属性和方法进行修改。5.1继承代码实例nVehicl

5、e类: n public class Vehicle n String color = “white”; n protected float speed; n public void accelerate(). n nAutomobile类 n public class Automobile extends Vehicle n float fuelConsum; n public void decelerate()speed = speed 10; nnVehicle类与Automobile类的属性及方法:方法: accelerate()属性: color speedVehicle类方法: a

6、ccelerate() decelerate()属性: color speed fuelConsumAutomobile类5.1继承nCar类:npublic class Car extends Automobilen private int price;n public void decelerate()n speed = speed 20; n 5.1继承方法: accelerate()属性: color speedVehicle类方法: accelerate() decelerate()属性: color speed fuelConsumAutomobile类方法: accelerate

7、() decelerate()属性: color speed fuelConsum priceCar类Vehicle类、Automobile类及Car类的属性及方法:5.1继承n采用继承的方式来组织设计类,可以使程序结构更 清晰并降低编码和维护的工作量。5.2继承的使用不就多写几行 代码嘛,弄个 啥继承?/example1 class ClassAint doThis()int doThat() n假设现在要设计一个类ClassB,其中需要有ClassA 里的doThis(), doThat(),怎么办?/example2 class ClassB classA a = new ClassA(

8、);int doThis() return a.doThis(); int doThat() return a.doThis(); 5.2继承的使用/example1 class ClassAint doThis()int doThat() 5.2.1 属性和方法的继承n1. 属性的继承 (1)子类可以继承父类的所有非私有属性/example1 class PersonString name;int age; /example1 class StudentString name;int age;String dept; 1. 属性的继承n两个类有大量重复定义,可以怎么更改?/example2

9、class PersonString name;int age; class Student extends PersonString dept; n(2)属性的覆盖:子类可重新定义父类的非私有 属性1. 属性的继承注意:1.子类此时将有两个同名属性,一个是继承自父类的, 一个是自定义的 2.当子类执行继承自父类的方法时,处理的是继承自父类的属性 3.当子类执行自定义的方法时,处理的是自定义的属性 4.可以使用关键字super来实现父类属性的直接应用1. 属性的继承之属性的覆盖 public class Fatherint a = 100;public void miner() a-; pub

10、lic static void main(String args)Father x = new Father();Son y = new Son();System.out.println(“a of son is:“ + y.a);System.out.println(“a of sons super is:“ + y.getA();y.miner();System.out.println(“a of son is :“ + y.a);System.out.println(“a of sons super is:“ + y.getA(); class Son extends Fatherint

11、 a = 1;public void plus() a+; public int getA() return super.a; 1. 属性的继承之属性的覆盖n2. 方法的继承n方法的继承规则与属性类似,主要有如下几点: 1)子类可继承父类的所有非私有方法; 2)不能继承父类的构造方法; 3)如果子类方法与父类方法同名(不同参),则子 类重载父类方法; 4)如果子类方法与父类方法同名同参,则子类覆盖 (重写)父类方法,若要引用父类的方法,用关键 字super; 5)覆盖方法不能使用比被覆盖方法更严格的访问权 限。5.2.1 属性和方法的继承n方法的重载与覆盖有何区别?1)覆盖是子类和父类间的关系

12、,重载是同一类内部 多个方法的关系; 2)覆盖一般是两个方法间,而重载可能是多个方法 间; 3)覆盖的方法有相同方法名和形参表,而重载仅方 法名相同; 4)覆盖时区分方法的是调用它的对象,而重载根据 形参表决定调用哪个方法。2. 方法的继承之重载与覆盖class PersonString name;int age; void set(String s,int i) name = s;age = i; public void print() System.out.println(name+“,“+age); 2. 方法的继承例2. 方法的继承例public class Student exten

13、ds Personprotected String dept; public static void main(String args) Person p = new Person();p.set(“Richard“, 23);p.print();Student s = new Student();s.set(“Drodan“, 34);s.dept = “computer“;s.print(); n注意:由final修饰的方法是不能被子类覆盖的,只 能被重载!2. 方法的继承之finalclass Father public final void mathod()System.out.pri

14、nt(“the fathers mathod“); class Son extends Fatherpublic void mathod(int i)/如果没有形参i,就和 /父类方法相同 super.mathod(); System.out.println(“the sons mathod“+i); 2. 方法的继承之finaln构造函数的作用?定义对象的初始状态! nJAVA的几种初始化机制 1)默认变量初始化 如果没有明确为某个变量赋值,那么系统会自动赋值 :数字0;布尔型false;引用型null; 2)默认构造函数public Employee()name=“”; salary=0;

15、2. 方法的继承之构造函数3)显式变量初始化private String name = “lili”; /显式初始化4)带参数构造函数 public Employee(String n,double s)name = n;salary = s;2. 方法的继承之构造函数当所有构造函数都需要把某 一变量都赋于相同值时5)构造函数里调用本类已定义构造函数2. 方法的继承之构造函数class PersonString name;int age;Person(String n) name = n; Person(String n,int a) this(n); /调用第一个构造函数age = a; 6)子类构造函数里调用父类定义的构造函数2. 方法的继承之构造函数class Student extends Personint sid; Student(String n,int a,int id)super(n,a); /必须是第一条语句sid = id; n子类并不继承父类的构造函数,但子类构造函数与 父类构造函数存在如下原则: 1)如果子类没有定义任何构造函数,那么在创建子 类对象时将

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

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

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