子类与继承
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
▫ §6.2.3 继承关系(Generalization)的UML图
14
2010-8-1
如果一个类是另一个 类 的 子 类 , 那 么 UML 通 过使用一个实线连接两 个 类 的 UML 图 来 表 示 二 者之间的继承关系,实 线的起始端是子类的 UML 图 , 终 点 端 是 父 类 的 UML 图 , 但 终 点 端 使 用一个空心的三角形表 示实线的结束。
亚里斯多德将生物区分成植物(通常是不移 动的)和动物(时常会移动去获取食物)两 种。在林奈系统里,则被分为了植物界和动 物界两界。当使用植物界此一特定的分类时, 通常会是指三种概念的其中一种。由小至大, 这三个类群为:有胚植物、绿色植物、泛植 物
• §6.1 子类与父类
利用继承,可以先编写一个共有属性的一般 类,根据该一般类再编写具有特殊属性的新类, 新类继承一般类的状态和行为(成员变量与方 法),并根据需要增加它自己的新的状态和行 为。 由继承而得到的类称为子类,被继承的类称 为父类(超类)。 声明一个类的子类的格式如下:
例6
• §6.6 对象的上转型对象
27
2010-8-1
老虎是哺乳动物,哺乳类是老虎类的父类,只强调了 哺乳类的特点,弱化了老虎本身的属性。
• §6.6 对象的上转型对象
28
2010-8-1
假设,A类是B类的父类,当用子类创建一个 对象,并把这个对象的引用放到父类的对象中时, 比如:
A a; a=new B(); 或 A a; B b=new B(); a=b;
•无法直接操作: •被隐藏的成员变量和方法; •但 可 以 使 用 super 关 键 字 操 作 隐 藏 的 变 量 和 方 法 (第四节)
例3, 情况1 如果将子类改为: double computer(float x,float y){ „„ } 情况2 如果将父类改为: double computer(float x,float y){ „„ } 情况3 如果将子类改为: float computer(float x,float y, double z){ „„ } 情况4 如果将父类改为: protected float computer(float x,float y, double z){ „„ }
• §6.4
super关键字
19
2010-8-1
子类可以隐藏从父类继承的成员变量和方法, 如果在子类中想使用被子类隐藏的成员变量或方 法就可以使用关键字super。
20
2010-8-1
▫ §6.4.1
使用super操作被隐藏的成员变量和方法
在子类中想使用被子类隐藏的成员变量或 方法就可以使用关键字super。 比如 super.x、super.play() 就是访问和调 用被子类隐藏的成员变量x和方法play()。
(增)使用protected和友好型的区别
何时使用protected: 1,允许不同包中的子类继承其成员变量和方法。
2,禁止不同包中的类访问其成员变量和方法 何时使用友好的:
1,禁止不同包中的子类继承其成员变量和方法 2,禁止不同包中的类访问其成员变量和方法
权限 位置 类内 关键字 部 Public Protected Friendly Private
final方法
25
2010-8-1
如果用 final 修饰父类中的一个方法,那么 这个方法不允许子类重写。
▫ §6.5.3
常量
26
2010-8-1
如果成员变量或局部变量被修饰为 final的, 就是常量。 • 常量在运行期间不允许发生变化。 • 常量在声明时没有默认值,需要程序声 明时指定该常量的值
class 子类名 extends 父类名 { … }
class Student extends People{ ……… }
Student类声明为People类的子类,People是 student的父类, 如果没有extends,系统默认继承Object (java.lang.Object)
• §6.2
这时,称对象a是对象b的上转型对象。
•上转型对象不能操作子类新增的成员变量和 方法 •上转型对象可以操作继承的变量和方法,隐 藏的变量,重写的方法. •上转型对象不能调用子类重写的静态方法, 只能调用父类静态方法
例7
•注意: •父类对象不等于子类对象的上转型对象 (主要区别在于重写方法能否调用)
• §6.5 final关键字
23
2010-8-1
final 关键字可以修饰类、成员变量和方 法中的局部变量。
▫ §6.5.1 final类
24
2010-8-1
可以使用 final 将类声明为 final 类。 final 类不能被继承,即不能有子类。如:
final class A { … }
▫ §6.5.2
访问性
继承性
不同包 子类
同包类 不同包类 同包子 外部 外部 类
权限 位置 关键字 Public Protected Friendly Private
访问性
类内 部 √ √ √ √ 同包类 外部 √ √ √ X 不同包类 外部 √ X X X
继承性
同包子 类 √ √ √ X 不同包 子类 √ √ X X
例4
▫ §6.4.2 使用super调用父类的构造方法
• 子类不继承父类的构造方法,因此,子类 如果想使用父类的构造方法,必须在子类的构 造方法中使用,并且必须使用关键字 super 来 表示,而且 super 必须是子类构造方法中的头 一条语句。 •例 5
▫ §6.4.2 使用super调用父类的构造方法
例9
• §6.9
面向抽象编程
35
2010-8-1
在设计一个程序时,可以通过在 abstract 类中声明若干个 abstract 方法, 表明这些方法在整个系统设计中的重要性, 方法体的内容细节由它的非 abstract 子类 去完成。
使用多态进行程序设计的核心技术之 一是使用上转型对象,即将 abstract 类 声明对象作为其子类的上转型对象,那 么这个上转型对象就可以调用子类重写 的方法。 所谓面向抽象编程,是指当设计某种 重要的类时,不让该类面向具体的类, 而是面向抽象类,即所设计类中的重要 数据是抽象类声明的对象,而不是具体 类声明的对象。
▫ §6.3.2
方法重写(Override)
16
2010-8-1
例2
▫ §6.3.2
方法重写(Override)
17
2010-8-1
2.重写的目的 •子类通过方法的重写可以隐藏继承的方法,子类通过 方法的重写可以把父类的状态和行为改变为自身的状态 和行为。 重写方法(包括新声明的方法)
•可以操作: •继承的成员变量和方法; •新声明的成员变量和方法;
把真核生物分为三界: 植物界 动物界 真菌界
动物是多细胞真核生命体中的一大类群,称 之为动物界。动物身体的基本形态会在它们 发育时变得固定,通常是早在其胚胎发育时, 但也有些会在其稍后的生命中有个变态的过 程。大多数动物是能动的-它们能自发且独 立地移动。绝大多数动物是消费者-它们依 靠其他生命体(如植物)作为其食粮。但也 有少部分动物属于分解者——以已经死亡的 生物体(有机质)作为食粮(例如蚯蚓)。
子类的继承性
8
2010-8-1
子类继承父类的成员变量作源自文库自己的一个 成员变量,就好象它们是在子类中直接声明一 样,可以被子类中自己定义的任何实例方法操 作。
子类继承父类的方法作为子类中的一个方法, 就象它们是在子类中直接定义了一样,可以被 子类中自己定义的任何实例方法调用。
▫ §6.2.1 子类和父类在同一包中的继承性
第6章子类与继承
1
2
2010-8-1
主要内容
• • • • • • • • • •
子类与父类 子类的继承性 成员变量的隐藏和方法重写 super关键字 final关键字 对象的上转型对象 继承与多态 abstract类与abstract方法 面向抽象编程 开-闭原则
真核生物是其细胞具有细胞核的单细胞生物和多细胞生物的总称,它包括所有动物、 植物、真菌和其他具有由膜包裹着的复杂亚细胞结构的生物。
例8
• §6.8
abstract类和abstract()方法
32
2010-8-1
用关键字 abstract 修饰的类称为 abstract 类(抽 象类)。如:
abstract class A { … }
用关键字abstract修饰的方法称为abstract方法 (抽象方法),例如:
abstract int min(int x,int y);
注意: 1.abstract类中可以有abstract方法 abstract class A{ abstract int min(int x,int y); int max(int x,int y){„„} } 2.abstract类不能用new运算创建对象 子类必须重写抽象父类的抽象方法给出方 法体
•场景 1 省略 univerStudent 的 super 结 果?
如果子类的构造方法没有 super 关键字, super(); 是默认 加载到子类的构造方法中;
场 景 2 如 果 再 省 略 Student 中 的 student()结果?
如果一个类中有一个或多个构造方法,默认构造方法会取 消,如果此类需要作为父类,应该包括一个不带参数的构造方法, 防止子类省略super出现错误
•上转型对象可以强制转化为子类对象,该 子类对象又具备了子类的所有属性和功能
•不可以将父类创建的对象引用赋值给子类 声明的对象 People 类人猿是人=new 类人猿();
• §6.7
继承与多态
31
2010-8-1
哺乳动物的叫声很多种,如
汪~
喵~
多态性就是指父类的某个方法被其子类重写 时,可以各自产生自己的功能行为。 思考使用UML 完成设计
3. 因为 final 不能重写,但是又因为“ 2 ” 所以final和abstract不能同时修饰方法或类
4.Abstract 类可以没有 abstract ()方法; 5. 如果一个 abstract 类是 abstract 类的子 类,他可以重写父类的 abstract 方法,也可 以继承这个abstract()方法;
public class Circle extends Geometry { double r; Circle(double r) { this.r=r; } public double getArea() { return(3.14*r*r); } }
public class Pillar { Circle bottom; //bottom是抽象类Geometry声明的变量 double height; Pillar (Geometry bottom,double height) { this.bottom=bottom; this.height=height; } public double getVolume() { return bottom.getArea()*height; //bottom可以调用子类重写的 getArea方法 } }
• §6.3 成员变量的隐藏和方法重写 • §6.3.1 成员变量的隐藏
对于子类可以从父类继承的成员变量,只要
子类中声明的成员变量和父类中的成员变量同 名时,子类就隐藏了继承的成员变量。 子类对象任然可以调用从父类继承的方法 操作隐藏的成员变量。 (增)例子:成员变量的隐藏
子类通过重写可以隐藏已继承的实例方法。 1.重写的语法规则 • 如果子类可以继承父类的某个实例方法,那 么子类就有权利重写这个方法。 • 方法重写是指:子类中定义一个方法,这个方 法的类型和父类的方法的类型一致或者是父类的 方法的类型的子类型,并且这个方法的名字、参 数个数、参数的类型和父类的方法完全相同。
9
如果子类和父类在同一个包中,那么,子类
自然地继承了其父类中不是 private的成员变量
作为自己的成员变量,并且也自然地继承了父类
中不是private的方法作为自己的方法,继承的
成员变量或方法的访问权限保持不变。
例1
▫ §6.2.2 子类和父类不在同一包中的继承性
如果子类和父类不在同一个包中,那么,子 类继承了父类的 protected、public 成员变量做 为子类的成员变量,并且继承了父类的 protected、public 方法为子类的方法,继承的 成员或方法的访问权限保持不变。