第4章 面向对象(下)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.2 final关键字
final关键字修饰类
➢ Java中的类被final关键字修饰后,该类将不可以被继承,也就是不能 够派生子类。
案例代码
接下来通过一个案例来验证此特性。
4.2 final关键字
final关键字修饰方法
➢ 当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方 法。
4.3 抽象类和接口
➢ 当一个类中包含了抽象方法,该类必须使用abstract关键字来修饰,使用 abstract关键字修饰的类为抽象类,具体示例如下:
➢ 在定义抽象类时需要注意,包含抽象方法的类必须声明为抽象类,但抽象类 可以不包含任何抽象方法,只需使用abstract关键字来修饰即可。另外,抽象 类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没 有方法体的,不可以被调用。如果想调用抽象类中定义的方法,则需要创建 一个子类,在子类中将抽象类中的抽象方法进行实现。
➢ 在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的 对象,根据被引用子类对象特征的不同,得到不同的运行结果。
案例代码
接下来通过一个案例来演示多态的使用。
4.4 多态
多态的类型转换
➢ 在多态的学习中,涉及到将子类对象当作父类类型使用的情况,此种情况在 Java的语言环境中称之为“向上转型”,例如下面两行代码:
案例代码
接下来通过一个案例来认识一下什么是异常。
4.5 异常(Exception)
➢ 接下来通过一张图来展示Throwable类的继承体系,如下图所示。
➢ 通过图中可以看出,Throwable有两个直接子类Error和Exception,其中Error 代表程序中产生的错误,Exception代表程序中产生的异常。
4.1 类的继承
➢ 在类的继承中,需要注意一些问题,具体如下:
1.在Java中,类只支持单继承,不允许多重继承,也就是说一个类只 能有一个直接父类,例如下面这种情况是不合法的。
2.多个类可以继承一个父类,例如下面这种情况是允许的。
3.在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C类继承 自B类,而B类又可以去继承A类,这时,C类也可称作A类的子类。例如下面这种情况是允许 的。
4.5 异常(Exception)
➢ 接下来就对这两个直接子类进行详细的讲解。
4.3 抽象类和接口
➢ 在上面的语法中,一个接口可以有多个父接口,他们之间用逗号隔开。Java使 用接口的目的是为了克服单继承的限制,因为一个类只能有一个父类,而一个 类可以实现多个接口。接口中的变量默认使用“public static final”来修饰, 即全局常量;接口中定义的方法默认使用“public abstract”来修饰,即抽象 方法。如果接口声明为public,则接口中的变量和方法全部为public。
➢ 在前面多态的讲解中,如果方法的参数被定义为一个接口类型,那么就需要定 义一个类来实现接口,并根据该类进行对象实例化。除此之外,还可以使用匿 名内部类来实现接口。所谓匿名内部类就是没有名字的内部类,表面上看起来 它似乎有名字,实际那不是它的名字。当程序中使用匿名内部类时,在定义匿 名内部类的地方往往直接创建该类的一个对象。
➢ 由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口 中的方法。此时需要定义一个类,并使用implements关键字实现接口中所有的 方法。一个类可以在继承的同时实现多个接口,在implements子句中用逗号隔 开。接口的实现类声明格式如下:
案例代码
接下来通过一个案例来学习接口的使用。
4.在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以 是另一个类的子类。例如上面的示例中,B类是A类的子类,同时又是C类的父类。
4.1 类的继承
重写父类方法
➢ 在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要 对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是, 在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列 表以及返回值类型。
案例代码
接下来通过一个案例来学习如何实现抽象类中的方法。
4.3 抽象类和接口
接口
➢ 如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来 定义,即接口。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步 抽象。
➢ 在定义接口时,需要使用interface关键字来声明,其语法格式如下:
☞点击查看本小节知识架构
抽象类和接口
☞点击查看本小节知识架构
USB接口程序设计
多态
☞点击查看本小节知识架构
模拟物流快递系统程序设计
异常(Exception)
☞点击查看本小节知识架构
访问控制
知识架构
返回目录 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5
4.5 异常(Exception)
4.3 抽象类和接口
抽象类
➢ 当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些 方法的实现方式是无法确定的。例如前面在定义Animal类时,shout()方法用于 表示动物的叫声,但是针对不同的动物,叫声也是不同的,因此在shout()方法 中无法准确描述动物的叫声。
➢ 针对上面描述的情况,Java允许在定义方法时不写方法体,不包含方法体的方 法为抽象方法,抽象方法必须使用abstract关键字来修饰,具体示例如下:
什么是异常 try…catch和finally throws关键字 运行时异常与编译时异常 自定义异常
4.1 类的继承
继承的概念
➢ 在现实生活中,继承一般指的是子女继承父辈的财产。在程序中, 继承描述的是事物之间的所属关系,通过继承可以使多种事物之 间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描 述为猫和狗继承自动物,同理,波斯猫和巴厘猫继承自猫,而沙 皮狗和斑点狗继承自狗。这些动物之间会形成一个继承体系,具 体如下图所示。
• getClass().getName()代表返回对象所属类的类名,即Animal。 • hashCode()代表返回该对象的哈希值。 • Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示。
➢ 其中,hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址 进行哈希运算,返回一个int类型的哈希值。
任务案例
案例代码
接下来,通过一个USB接口程序设 计来熟悉本阶段的知识点。
4.4 多态
多态概念
➢ 在设计一个方法时,通常希望该方法具备一定的通用性。例如要实现一个动物 叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类 型的参数,当传入猫类对象时就发出猫类的叫声,传入犬类对象时就发出犬类 的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象 就是多态。继承是多态得以实现的基础。
4.1 类的继承
➢在Java中,类的继承是指在一个现有类的基础上去构 建一个新的类,构建出来的新类被称作子类,现有类被 称作父类,子类会自动拥有父类所有可继承的属性和方 法。在程序中,如果想声明一个类继承另一个类,需要 使用extends关键字。
案例代码
接下来通过一个案例来学习子类是如何继承父类的
➢ 当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个 问题,在Java中专门提供了一个super关键字用于访问父类的成员。例如访问父类 的成员变量、成员方法和构造方法。接下来分两种情况来学习一下super关键字的 具体用法。
1.使用super关键字访问父类的成员变量和成员方法。具体格式如下:
2.使用super关键字访问父类的构造方法。具体格式如下:
案例代码
接下来通过一个案例来学习此种情况下super关键字的用法。
4.2 final关键字
➢ final关键字可用于修饰类、变量和方法,它有“无法改变”或者“最 终”的含义,因此被final修饰的类、变量和方法将具有以下特性:
• final修饰的类不能被继承。 • final修饰的方法不能被子类重写。 • final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。
案例代码
下面通过一个例子来演示Object类中toString()方法的使用。
4.4 多态
➢ 在Object类中定义了toString()方法,在该方法中输出了对象的基本信息, Object类的toString()方法中的代码具体如下:
➢ 为了方便初学者理解上面的代码,接下来分别对其中用到的方法进行解释,具 体如下:
之间要用逗号隔开。具体示例如下:
4.3 抽象类和接口
• 一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。具体示例 如下:
• 一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于 implements关键字之前。具体示例如下:
【任务4-1】USB接口程序设计
第四章 面向对象(下)
• 类的继承 • 多态 • 异常
• final关键字 • 接口
学习目标
掌握类的继承、方法重写、super关键字
1
的使用、final关键字、抽象类和接
口、多态的使用以及异常的处理方式
掌握
了解什么是异常
3
熟悉面向对象继承
和多态的概念 2
目录
类的继承
☞点击查看本小节知识架构
final关键字
4.3 抽象类和接口
➢ 为了加深初学者对接口的认识,接下来对接口的特点进行归纳,具体如下:
• 接口中的方法都是抽象的,不能实例化对象。 • 接口中的属性只能是常量。 • 当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则
需要实现接口中的所有方法。 • 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口
案例代码
接下来将4.4.1小节中文件4-19 Example13.java改为内部类的方式进 行实现。
【任务4-2】模拟物流快递系统程序设计
任务案例
案例代码
接下来,通过一个模拟物流快递系 统程序设计来熟悉本阶段的知识点 。
4.5 异常(Exception)
什么是异常
➢ 尽管人人希望自己身体健康,处理的事情都能顺利进行,但在实际生活中总会 遇到各种状况,比如感冒发烧,工作时电脑蓝屏、死机等。同样,在程序运行 的过程中,也会发生各种非正常状况,比如程序运行时磁盘空间不足、网络连 接中断、被装载的类不存在等。针对这种情况,在Java语言中,引入了异常, 以异常类的形式对这些非正常情况进行封装,通过异常处理机制对程序运行时 发生的各种问题进行处理。
➢ 将子类对象当作父类使用时不需要任何显式地声明,需要注意的是,此时不能 通过父类变量去调用子类中的特有方法。
案例代码
接下来通过一个案例来演示对象的类型转换和强制类型转换就会运行 出错的情况。
4.4 多态
Object类
➢ 在JDK中提供了一个Object类,它是类层次结构的根类,每个类都直接或间接 继承自该类,所有对象(包括数组)都实现了这个类的方法。Object类中的常 用方法如下表所示。
案例代码
接下来通过一个案例来验证此特性。
4.2 final关键字
final关键字修饰变量
➢ Java中被final修饰的变量称为常量,它只能被赋值一次,也就是说 final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行 赋值,则程序会在编译时报错。
案例代码
接下来通过一个案例来演示这种错误和final修饰成员变量的情况。
➢ 案例中,Dog类从Animal类继承了shout()方法,该方法在被调用时会打印 “动物发出叫声”,这明显不能描述一种具体动物的叫声,Dog类对象表 示犬类,发出的叫声应该是“汪汪汪”。
案例代码
为了解决这个问题,可以在Dog类中重写父类Animal中的shout()方 法。
4.1 类的继承
super关键字
案例代码
toString()方法返回的不仅仅是基本信息,而是一些特有的信息,这 时重写Object的toString()方法便可以实现。
ቤተ መጻሕፍቲ ባይዱ
4.4 多态
匿名内部类
➢ 在编写Java程序时,在类里面定义的类称之为内部类(Inner Class),内部类 是外部类的一个成员。Java内部类可以分为:成员内部类、方法内部类和匿名 内部类等。
相关文档
最新文档