Java实用教程第9讲继承和多态
Java继承与多态
继承跟多态的区别
继承跟多态的区别在计算机语言中有一种是JAVA的语言,里面有一些方法,继承,重载,重写。
下面是店铺为你整理的继承跟多态的区别,供大家阅览!重载,继承,重写和多态的区别:继承是子类获得父类的成员,重写是继承后重新实现父类的方法。
重载是在一个类里一系列参数不同名字相同的方法。
多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。
网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
下面的例子包含了这四种实现:class Triangle extends Shape {public int getSides() { //重写return 3;}}class Rectangle extends Shape {public int getSides(int i) { //重载return i;}}public class Shape {public boolean isSharp(){return true;}public int getSides(){return 0 ;}public int getSides(Triangle tri){return 3 ;}public int getSides(Rectangle rec){return 4 ;}public static void main(String[] args) {Triangle tri = new Triangle(); //继承System.out.println("Triangle is a type of sharp? " + tri.isSharp());Shape shape = new Triangle(); //多态System.out.println("My shape has " + shape.getSides() + " sides.");}}注意Triangle类的方法是重写,而Rectangle类的方法是重载。
JAVA-继承与多态PPT学习课件
5
2020年2月16日星期日
Java程序设计 EmployeeClass类与ManagerClass类的关系图
6
2020年2月16日星期日
Java程序设计
// file name:EmployeeClass.java
public class EmployeeClass {
// 雇员类
private String name;
9
2020年2月16日星期日
Java程序设计 ShapeClass类、RectangleClass类与 SquareClass类之间的关系类图
ShapeClass类是几何图元的通用类;矩形是一种特定的几何图元,因此, RectangleClass类应该是ShapeClass的子类;正方形是一种特殊的矩形, 所以SquareClass类是RectangleClass类的子类。
public double getSpecial() { ... }
public String toString() { ... }
}
8
2020年2月16日星期日
Java程序设计
举例:设计与几何图元有关的类。
问题分析:几何图元是指可以绘制的基本几何图形,例如矩形、正 方形、圆形、多边形等。鉴于篇幅的考虑,这里只考虑矩形与正方 形。 假设任何几何图元都有颜色与位置两个属性,因此应该将这些共有 特性定义在一个类中,它是顶层类;而矩形还应该有长、宽两个属 性,由于矩形是一种几何图元,所以它自然应该拥有几何图元的共 有特性,因此可以将矩形类设计为几何图元类的子类;因为正方形 是一种特殊的矩形,它的特殊性在于长与宽相等,所以应该将正方 形类设计为矩形的子类。
// 颜色属性
private Point place; // 位置属性
java继承与多态
java继承与多态继承继承:可以让⼦类继承⽗类,这样⼦类会继承⽗类所有的属性和⽅法。
然⽽在Java中是不允许有多继承的,即⼀个⼦类只能继承⼀个⽗类,不能同时继承多个⽗类。
如果⼀个类还需要另外⼀个类的⽅法,可以让⽗类去继承需要的类。
但Java中⽀持多重继承,即⼀个⼦类也可以做为其他类的⽗类。
Object类:是Java中的祖宗类,当⼀个类在代码层⾯没有去继承任何的⽗类,那这个类默认会继承object类。
继承的重写(覆盖):⼦类继承⽗类以后,可以获取到⽗类的所有⽅法(包含被private修饰的⽅法,只是访问不到),如果⽗类的⽅法功能不能满⾜⼦类的需求,那么⼦类可以根据需求对这个⽅法进⾏重写。
Super关键字:⼦类继承⽗类后,⼦类可以通过super关键字去指向⽗类的元素(属性,构造⽅法,普通⽅法)。
如果是指向⽗类的构造⽅法:super()如果是指向⼦类的构造⽅法:this()注:像super(),this()这样的表达式只能存在于构造⽅法中,且只能出现⼀次。
如果是指向⽗类的普通⽅法:super.⽅法名称()如果是指向⽗类的属性:super.属性名称()构造⽅法的继承:在继承时,当⼦类⽤到默认的⽆参构造⽅法时,⽗类必须要有⽆参构造⽅法,不然⼦类的构造⽅法就会报错。
因为⼦类继承⽗类之后,获取到了⽗类的内容(属性/字段),⽽这些内容在使⽤之前必须先初始化,⼦类如果在没有⾃定义构造⽅法的情况下默认会有⼀个⽆参构造⽅法,其中第⼀⾏默认会有⼀个super(),所以必须先调⽤⽗类的构造函数进⾏内容的初始化。
所以⽗类必须要有⼀个⽆参构造⽅法。
⼦类直接继承得到的属性⽆法直接获取,可以通过⽗类的get和set⽅法来获取和修改属性。
public class Animal {private String name;private int age;private String hobby;public Animal(){}public Animal(String name, int age, String hobby) { = name;this.age = age;this.hobby = hobby;}}public class Dog extends Animal {public Dog(String name, int age, String hobby) {super(name, age, hobby);}}⽅法重写与⽅法重载的区别:⽅法重写override:⽅法重写是指⼦类在继承了⽗类之后需要对⽗类的⼀些⽅法进⾏修改,以适应程序需求,因此在⼦类中重写⽗类中原有的⽅法。
java的封装,继承和多态(思维导图)
java的封装,继承和多态类和对象类类声明 { 成员变量的声明; 成员方法的声明及实现; }声明类:[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]声明成员变量:[修饰符]数据类型 变量[=表达式]{,变量[=表达式]}成员方法声明:[修饰符]返回值类型 方法([形式参数列表])[throws 异常类列表]{语句序列;[return[返回值]]; }重载:一个类中可以有多个同名的成员方法,前提是参数列表不同,称为类的成员方法重载,重载的多个方法为一种功能提供多种实现。
重载方法之间必须以不同的参数列表(数据类型、参数个数、参数次序)来区别。
例如,MyDate 类可声明多个重载的set()方法如下: void set(int y,int m, int d)void set(int m, int d) //重载方法,参数个数不同void set(int d) void set(MyDate date)//重载方法,参数的数据类型不同对象对象声明:类 对象构造实例:对象 = new 类的构造方法([实际参数列表])引用对象的成员变量和调用成员方法:对象.成员变量 对象.成员方法([实际参数列表])类的封装性构造与析构类的构造方法用于创建类的一个实例并对实例的成员变量进行初始化一个类可声明多个构造方法对成员变量进行不同需求的初始化,构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。
例:MyDate类声明以下构造方法:public MyDate(int year, int month, int day)// 声明构造方法,方法名同类名,初始化成员变量 {set(year, month day);// 调用 set()方法,为成员变量赋值}使用new运算符调用指定类的构造方法,实际参数列表必须符合构造方法声明。
例如:MyDate d1 = new MyDate(2017,10,1);//创建实例并初始化成员变量当一个类没有声明构造方法时,Java 自动为该类提供一个无参数的默认构造方法对象的引用与运算this引用访问本类的成员变量和成员方法:this.成员变量,this.成员方法([实际参数列表])调用本类重载的构造方法:this([实际参数列表])访问控制类的访问控制权限公有和(public)和缺省类中成员4级访问控制权限及范围声明set()和get()方法存取对象的属性例:public void set(int year, int month, int day) //设置日期值 public void set(MyDate date)//设置日期值,重载 public int getYear()//获得年份 public int getMonth()// 获得月份 public int getDay()//获得当月日期静态成员定义及访问格式使用关键字static声明的成员称为静态成员在类内部,可直接访问静态成员,省略类名。
继承与多态课件ppt
• 类的对象成员与类的一般数据成员的构造顺序?
先构造类的对象成员,再构造一般数据成员(执 行类自身的构造函数体)。
• 构造顺序与析构顺序的关系?
二者顺序相反:先构造者,后析构。
继承
多继承:一个类从多个基类派生,这样的继
承结构称为多继承
Father
int leg; int body; Public: …… };
Class teacher:public human { string name; h1 Public: …… };
• 派生类对象的空间占用≥基类对象的空间占用
继承
类内的访问控制:派生类是否能访问所有基类 成员?
对于基类的私有成员,派生类不能直接访问 protected的作用:只能让子类访问而不能让
• 练习2:设计一个虚基类base,包含姓名和 年龄私有数据成员以及相关的成员函数, 由它派生出领导类leader,包含职务和部门 私有数据成员以及相关的成员函数。再由 base派 生出工程师类engineer,包含职称 和专业私有数据成员以及相关的成员函数。 然后由leader和engineer类派生出主任工程 师类chairman。采用一些数据进行测试。
派生类(子类)
human teacher
通常有关系:子类 is a 父类
继承
Inheritance
继承
继承
Student
Employee
GradStudent
Manager
Fig.1 单重继承
Vehicle
Father
Mather
Car Coupe Fig.2 多层继承
Child
Fig.3 多重继承
Java继承与多态实验报告.doc
Java继承与多态实验报告.doc
Java的继承与多态实验报告
本报告致力于分析Java继承与多态的概念、原理和作用,以及相关实验过程及其结果。
继承,又称为分类,是Java面向对象程序设计语言中定义类之间关系的重要技术。
它使一个类可以使用另一个基类中定义的方法和属性,在基类中已经定义了一些功能,子
类可以对基类功能进行拓展与定制。
《Java技术手册》得出结论,继承可以有效提高软件的复用性、可维护性和可重用性,使大型的、复杂的程序有条理层次。
多态是Java中一种特殊的程序结构,允许不同类的对象对相同的消息作出不同的响应,由程序的消息而不是对象的类型来决定对象的行为。
它是Java多态性的基础,使程
序能够在不同对象上进行操作,统一实现。
从实验中,可以明显看出Java继承与多态之间的联系:多态必须依赖于继承,当子
类被创建时,它继承了母类的方法以及特性,这样,它才能以逐渐上升的方式处理所有消息,而多态给了子类独特-->性的功能。
同时,多态也方便了代码重用,因为子类会继承
母类的方法和属性。
此外,结果表明,多态的优点使程序可以提高可重用性,它也减少了代码的重复编写,同时允许特定类之外的类可以得到适用。
它促进了软件不断更新,因为多态给开发人员提
供了以对象层次组织代码的方法。
本练习涉及到Java继承与多态概念的整体概述和实现细节,为完全理解多态的概念
打下了坚实的基础。
它提供了一个理解和使用这些概念的有用方式和指导。
java中继承的概念及作用
在Java中,继承是一个面向对象编程(OOP)的基本概念,它是面向对象三大特性(封装、继承、多态)之一。
继承背后的思想是基于已存在的类来构建新的类,从而实现代码的重用、模块化设计以及不同抽象层次的体现。
继承的作用主要体现在以下几个方面:
1. 代码重用:通过继承,子类可以重用父类的属性和方法,避免重复编写相同的代码,提高代码的可重用性。
2. 模块化设计:继承有助于实现模块化设计,将相关功能组织在一起,便于维护和扩展。
3. 实现多态:继承为实现多态提供了基础。
通过重写父类的方法,子类可以根据需要实现不同的功能,从而实现多态。
4. 代码简洁:继承可以简化代码结构,将复杂的功能拆分为多个模块,使代码更简洁、易读。
在Java中,继承是通过`extends`关键字来实现的。
一个类只能有一个直接父类,但可以继承多个接口。
继承的关系遵循"is-a"原则,即子类是父类的一种特殊情况。
继承在Java编程中具有重要作用,它不仅可以提高代码的可重用性,还可以实现模块化设计和多态,使代码更简洁、易读。
Java中封装、继承、多态的理解
Java中封装、继承、多态的理解Java中的继承、封装、多态继承的理解:1、继承是⾯向对象的三⼤特征之⼀,也是实现代码复⽤的重要⼿段。
Java的继承具有单继承的特点,每个⼦类只有⼀个直接⽗类。
2、Java的继承通过extends关键字来实现,实现继承的类被称为⼦类,被继承的类称为⽗类(有的也称其为基类、超类),⽗类和⼦类的关系,是⼀种⼀般和特殊的关系。
就像是⽔果和苹果的关系,苹果继承了⽔果,苹果是⽔果的⼦类,⽔果是苹果的⽗类,则苹果是⼀种特殊的⽔果。
3、Java使⽤extends作为继承的关键字,extends关键字在英⽂是扩展的意思,⽽不是继承。
为什么国内把extends翻译成继承呢?除了与历史原因有关外,把extends翻译成为继承也是有其道理的:⼦类扩展⽗类,将可以获得⽗类的全部属性和⽅法,这与汉语中得继承(⼦辈从⽗辈那⾥获得⼀笔财富成为继承)具有很好的类似性。
值得指出的是:Java的⼦类不能获得⽗类的构造器。
4、实例:class BaseClass{public double weight;public void info() {System.out.println("我的体重是"+weight+"千克");}}public class ExtendsDemo001 extends BaseClass {public static void main(String[] args) {//创建ExtendsDemo001对象ExtendsDemo001 ed = new ExtendsDemo001();//ExtendsDemo001本⾝没有weight属性,但是ExtendsDemo001的⽗类有weight属性,也可以访问ExtendsDemo001对象的属性ed.weight = 56;//调⽤ExtendsDemo001对象的info()⽅法();}}打印结果为:我的体重是56.0千克5、Java类只能有⼀个⽗类。
简述继承和多态的功能
简述继承和多态的功能
【继承】类的继承性是指上级父类能够把自己的属性、操作传递给下级子类,由此可以大大减少程序中的冗余信息。
可以使用从原有父类派生出新的子类的办法来修改软件,如改变类原有操作的算法,这时并不需要改变类原有的代码,而只是新建一个派生子类,然后在该派生子类中建立一个与父类方法同名而算法不同的方法。
因此,通过类的继承性还可使软件获得更加有效的重用。
当需要开发一个新的应用系统时,可以通过继承而使原有的相似系统的功能获得利用,或者从类库中选取需要的类,然后再派生出新的子类,以实现新系统的新功能。
【多态】多态性是指子类对象可以像父类对象那样使用,它们可以共享一个操作名,然而却有不同的实现方法。
也就是说,不同层次中的类,可以按照各自的需要,分别采用不同的方法实现这个共同的操作。
C++语言中,多态性是通过虚函数来实现的,可以声明名称、参数特征和返回值类型都相同的虚函数,但不同层次的类中的虚函数的实现算法却各不相同。
虚函数机制使得程序员能在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据接收消息的对象所属的类,决定到底执行哪个特定的版本。
多态性增加了面向对象软件系统的灵活性,而且显著提高了软件的可重用性和可
扩充性。
当需要扩充系统功能或在系统中增加新的实体类时,只要派生出与新的实体类相应的新的子类,并在新派生出的子类中定义符合该类需要的虚函数,而无须修改原有的程序代码。
Java语言中的继承与多态
s ue tn m : 张 三 ” t d n 、a e ” : suetgtno (: td n .e If r ) ) )
a e ”a e ; g :+ g ))
) c as Su e t e t n s P r o { ls t d n xe d e s n
9 1
Ab t c : e c i g i a a s c s n e i a c s r t T a h n n J v , u h a i h r t n e,p l m r h s s t e e p a i n i f c l y , T r u h h a o y o p im i h mh s sa d d f i u t h o g t e
( 华东交通大学信息工程学 院, 江西 南昌
30 1 to n ie r n ,E s h n io o g U ie s t ,J ag iN n h n 3 0 1 ) S h o f If r a i n E g ne ig a tC i a J a t n n v r i y in x a ca g 3 0 3
维普资讯
语
语 言 中的
与多 态
黎海生
Li Hai he s ng
的 由 言
承 继
与 多 态
T e n e i a c n o y o p ii i a a L n u g h Ih r n e a d P l m r h S n J v a g a e t n
有 台 关 .全 制高 靠 ,线和 嵌 络 平无 性安 机 .可性 多程 内网 支
lun}- d _. s e 一 t _
一
持特,全 界程员 量重的计念 已 性为世的 忽的了要发理, 成 今 机 不 视来一 的 潮与 的当 算业编人 力和新设流 为 计 界可 带 种 展
继承封装多态简单理解
继承封装多态简单理解
继承、封装和多态是面向对象编程的三大基本特性,它们使得代码更加模块化、可重用性更高,同时也提高了代码的灵活性和可维护性。
以下概括几点,仅供参考:
1. 封装:封装是把数据或函数等集合在一个个的单元中(我们称之为类)。
被封装的对象通常被称为抽象数据类型。
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
2. 继承:继承是让某个类型的对象获得另一个类型的对象的属性的方法。
它支持按级分类的概念。
继承的过程,就是从一般到特殊的过程。
继承概念的实现方式有二类:实现继承与接口继承。
3. 多态:多态机制使具有不同内部结构的对象可以共享相同的外部接口。
这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
总的来说,封装、继承和多态是面向对象编程的重要概念,它们在代码的设计和实现中起着重要的作用。
《继承与多态》课件
可读性和复用性,减少代码冗余。
总结
4
继承和多态是面向对象编程中重要的 思想和方法,对于软件开发具有重要
意义。
多态可以通过方法重写和方法重载来实现, 使不同的对象可以对同一方法表现出不同 的行为。
3 多态的好处
4 多态的注意事项
多态提高了代码的灵活性和可扩展性,使 代码更易于维护和扩展。
在使用多态时,需要注意方法的参数类型 和返回值类型,以避免类型错误导致的运 行时错误。
三、继承与多态的实例
实例介绍
通过一个学校的班级管理系统实例,演示继承和 多态的实际应用。
《继承与多态》PPT课件
本课程介绍继承与多态的概念和应用。通过丰富的实例和实践演示,帮助学 生深入理解这些重要的面向对象编程概念。
一、继承
什么是继承
继承是面向对象编程中的重要概念,允许子 类继承父类的属性和方法。
继承的实现方式
继承可以通过使用关键字extends将子类与父 类联系起来,形成继承关系。
实例演示
展示如何通过继承和多态处理学生和老师的不同 操作,并实现班级管理的各项功能。
四、总结
1
继承与多态的异同
继承和多态都是面向对象编程的核心
适用场景
2
概念,但它们的实现方式和应用场景 有所不同。
继承适用于父子类之间的继承关系,
而多态适用于处理不同对象的同一操
作。
3
使用技巧
合理应用继承和多态可以提高代码的
继承的好处
通过继承,子类可以重用父类的代码,提高 开发效率,并实现代码的复用。
继承的注意事项
在继承中,需要注意继承层级、构造函数的 调用以及方法重写等问题,以确保正确的继 承操作。
二、多态
第9讲 Java继承与多态PPT演示课件
2019/11/5
8
getClass()方法的使用
getClass()方法返回一个Class类对象,该对 象内部包含了一些能够标识当前对象的信息。 如果想知道某个对象obj是属于哪个类时,可 用obj.getClass()来查询。
2019/11/5
9
class A //声明一个名为A的类
{
private int num; public A(int a)
{ super(n,s,a);//调用了父类的构造方法Person(String n,String s,int a)
department=dep;
specialty=spe;
} public void showMe()//显示学生类数据成员
{ System.out.println("姓名:"+name+",性别:"+sex+",年龄:
编译这个类文件,编译器报错: cannot inherit from final Student。因为Student为final类,所以 它拒绝StudentOfComputer继承Student。
2019/11/5
6
Object类
在Java中,定义了一个类,这个类抽象了所有 类共有的一些属性和方法,这个类的名字是 Object。Object类是一切类的父类,所有的类 均直接或间接继承它,是类之源。所以, Person类的父类是Object类。
{ private String department;//系别 private String specialty;//专业 public Student() //定义无参数构造方法
{
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.out.println("Tree name:" + name); } } class Pine extends Tree { double height = 20.3; void printHeight(){
// PortableComputer.java class ElectricalEquipment{
ElectricalEquipment(){ System.out.println("ElectricalEquipment()");
} } class Computer extendtem.out.println("pMethod1 in FinalMethodDemo"); } private final void pMethod2(){
System.out.println("pMethod1 in FinalMethodDemo"); } public static void main(String[] args) {
如果在声明final的变量时没有给其赋值,则称为空 白final,这个变量只有一次赋值机会,那就是在构造方 法中。
9.3.2 空白final
下面程序展示了空白final的赋值:
// BlankFinal.java public class BlankFinal {
private final int a;//空白final void setA(int a){
(3)父类既定义了无参构造方法,也定义了有参构造方法 ,在创建子类的对象时,可以使用super调用父类的有参构 造方法,也可以不使用super,这时系统会自动调用父类的 无参构造方法。
9.2.3 再论方法重载
在一个类中可以定义多个同名的方法,这些方法通过参 数的不同(参数的个数不同或类型不同)来区分,称为方法 的重载。在父类中定义了某个方法,而在子类中也定义了名 字相同的方法,但两个方法的参数不同,这是也构成了重载 。下面程序代码展示了这种情况:
Computer(){ System.out.println("Computer()");
} }
9.2.2 父类的初始化
public class PortableComputer extends Computer { PortableComputer(){ System.out.println("PortableComputer()"); } public static void main(String[] args) { PortableComputer myPc = new PortableComputer(); }
System.out.print(f.c[i] + " "); } } }
9.3.2 空白final
在Java中,如果在声明变量时不给其赋值,系统可 以对其进行自动初始化,基本类型变量自动初始化为0, 其余类型变量自动初始化为空。但是final类型的变量必 须显示初始化,且初始化只能在两个地方进行:一是在 定义处,二是在构造方法中。且不能同时即在定时时赋 值,又在构造方法中赋值。
子类中也可以定义与父类中名字相同的成员变量,因为 名字相同,在子类中,从父类继承过来的这个变量被隐藏。 下面的程序代码展示了方法的重写和变量的隐藏:
9.2.4 变量的隐藏和方法的重写
// Overriding.java class Tree {
double height = 10.2; void printHeight(){
System.out.println("show(" + c + ")"); } } public class OverloadInExtend { public static void main(String[] args) {
University u = new University(); u.show(1); u.show(2,3); u.show('a'); } 在University类中有三个show方法:show(char c)、show(int i)和show(int j),三个 方 法构成重载方法,其中后两个show方法是从父类School中继承过来的。 }
9.2.4 变量的隐藏和方法的重写
因为子类可继承父类中的方法,所以子类不需要重新编 写相同的方法。但有时子类并不想原封不动地继承父类的方 法,而是想作一定的修改,这就需要采用方法的重写。方法 重写又称方法覆盖。 若子类中的方法与父类中的某一方法 具有相同的方法名、返回类型和参数表,则新方法将覆盖原 有的方法。
System.out.println("Pine tree height:" + height); } void printName(String name){
System.out.println("Pine tree name:" + name); } } public class Overriding { public static void main(String[] args) {
9.1 组合
9.2.1 继承的语法
•表明“继承”时,使用关键字extends,如: class Person{ } class Student extends Person{ }
•上面程序中类Student继承于Person类,Person类称为父类或基类, Student类称为子类或派生类。而在定义Person类时,并没有为其指定父 类,它默认的继承Object类,只不过“extends Object”可以省略:
FinalData f = new FinalData(); /* f.a = 10;//编译错误 FinalData.B = 20;//编译错误 f.c = new int[10];//编译错误 */ f.c[0] = 10; for (int i = 0;i < f.c.length;i++){
wclass Person extends Object{} •子类继承父类时,将得到父类中的所有成员,只是有的成员能够直接使用 ,有的成员只能间接使用。
9.2.2 父类的初始化
当创建一个子类的对象时,该对象中包含了一个父类的 对象。这个存在于子类对象中的父类对象同单独使用父类创 建的对象一模一样。而且父类对象要先被初始化,这个初始 化的动作是由构造方法来完成的。下面程序代码证明了这一 点:
第9讲 继承和多态
• 9.1 • 9.2 • 9.3 • 9.4 • 9.5
组合 继承 final关键字 多态 本讲小结
Java通过两种方式来实现代码的复用,即组 合和继承。组合是指创建新类时,新类中的成员 是由现有类的对象组成,这种方式比较直观。而 继承是指在现有类的基础上添加新的代码。这两 种方式都不会破坏原有代码。
9.3 final关键字
被关键字final修饰的东西是不能被修 改的,final可以修饰变量、方法和类。
9.3.1 final修饰的变量
声明final字段有助于优化器作出更好的优化决定, 因为如果编译器知道字段的值不会更改,那么它能安全 地在寄存器中高速缓存该值。final字段还通过让编译器 强制该字段为只读来提供额外的安全级别。
// FinalMethodDemo.java class FinalMethod{
final void show(){ System.out.println("show() in FinalMethod");
} private void pMethod1(){
System.out.println("pMethod1 in FinlaMethod"); } private final void pMethod2(){
9.2.3 再论方法重载
// OverloadInExtend.java class School {
void show(int i){ System.out.println("show(" + i + ")");
} void show(int i,int j){
System.out.println("show(" + i + "," + j + ")"); } } class University extends School { void show(char c){
final修饰的变量一旦被初始化便不可改变,这里不 可改变的意思对基本类型来说是其值不可变,而对于复 合数据类型来说其引用不可再变。
关键字final修饰的变量也可以定义为static的,称 为静态常量,在内存中占据一段不能改变的存储区域, 表示静态常量的名字全部用大写字母。
9.3.1 final修饰的变量
下面程序展示了final的用法:
// FinalData.java public class FinalData {
final int a = 1; static final int B = 2; final int[] c = {1,2,3,4,5}; public static void main(String[] args) {
Pine p = new Pine(); p.printName("MyTree"); p.printHeight(); } }
9.2.5 super关键字