第七章 面向对象高级特性

合集下载

面向对象高级特性

面向对象高级特性

案例分析:泛型在集合类中的应用
Java集合框架中的许多类都使用了泛型,如`ArrayList<E>`、`HashSet<E>`等。这些 泛型类允许我们存储和操作各种数据类型的元素,同时保证了类型安全。
在使用这些集合类时,我们可以指定具体的元素类型,如`ArrayList<String>`表示存 储字符串的列表,`HashSet<Integer>`表示存储整数的集合。
异常处理流程
异常抛出
当程序中出现错误或异常情况时, Python解释器会自动抛出异常,同时 终止程序的执行。
异常处理
在`except`块中,可以编写处理异常 的代码逻辑,例如打印错误信息、回 滚事务、关闭资源等。
异常捕获
使用`try-except`语句块来捕获异常,避免 程序因异常而中断执行。在`try`块中编写可 能引发异常的代码,在`except`块中处理异 常。
1 2 3
常见异常类型
包括`Exception`、`Error`、`RuntimeError`、 `TypeError`等,每种异常类型对应特定的错误情 况。
捕获异常方式
使用`try-except`语句块来捕获异常,其中`try` 块包含可能引发异常的代码,`except`块用于处 理异常。
多重异常捕获
桥接模式(Bridge Pattern)
将抽象部分与实现部分分离,使它们都可以独立地变化。
组合模式(Composite Patte…
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式 使得用户对单个对象和复合对象的使用具有一致性。
装饰器模式(Decorator Patt…
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模 式相比生成子类更为灵活。

07_面向对象高级特性三

07_面向对象高级特性三
4
把上节作业中Shape类的三个方法都改成抽象方法,其它按原来要求。看看结果是否一样。
5
设计飞的接口IFly,接口包含fly()方法。让鸟类Bird和飞机类Airplane实现这个接口。
编写用户程序FlyDemo,在程序中分别把鸟和飞机的对象赋值给接口,并调用接口的方法。
要求:
封装一个空调类,包涵风力和风向。里面有两个属性。风力、风向。并生成Set和Get方法。
要求空调的属性有制冷参数、功率参数等。
要求使用继承结构。空调底下有格力空调、美的空调等。
要求空调的包括(打开)turnOn、(关闭)turnoff()、(调整风力和风向)turnWind()方法等。
要求有些方法使用抽象方法,有些方法使用接口实现。
面向对象特性面向对象三大特性面向对象的特性面向对象编程面向对象程序设计面向对象三个特性面向对象什么是面向对象php面向对象java面向对象
面向对象高级特性_3课后作业
一、简答题
1.接口跟抽象类的异同?
陈述:
2.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?
陈述:
:
二、上机題:对应编号详细要求 Nhomakorabea1
把上节作业的Animal类中的方法bark改成抽象,然后同样编写实现多态的实例。
2
将Animal这个类改为接口,让其Dog、Cat等原先的类由继承Animal类改类实现Animal这个接口。同样编写实现多态的实例。
3
利用教室中的空调,通过抽象类和接口的混合使用。完成对空调的操作。

javaSE--09_面向对象高级特性

javaSE--09_面向对象高级特性

何时选择继承

一个很好的经验: 是一个A吗 如果是则让 如果是则让B 一个很好的经验:“B是一个 吗?”如果是则让 是一个 的子类. 做A的子类 的子类
常犯的错误A有一个 吗 常犯的错误 有一个B吗? 例如让汽车 有一个 轮子成为汽车的子类是错误的
继承性

class Trash_Car extends Car { double amount; public void fill_trash() { … } public void push_break() { speed = speed – 10; }
}
super关建字作用 关建字作用

子类可继承父类方法和变量. 子类可继承父类方法和变量
同一个包中 private default protected public
不同包中的子类
★ ★ ★
★ ★
变量隐藏及方法重写原则

变量隐藏原则: 变量隐藏原则 子类中变量名与继承自父类的变量名相同时, 子类中变量名与继承自父类的变量名相同时, 则继承自父类的变量将被隐藏。 则继承自父类的变量将被隐藏。 方法重写原则: 方法重写原则 //重载 重载 子类有个方法与父类的方法完全一致叫做重写 子类有个方法与父类的方法完全一致叫做重写 重写后的方法不能比被重写的方法有更严格的 访问权限(可以相同)。 改写后的方法不能比重写的方法产生更多的例 外。
变量隐藏示例

变量隐藏即指在子类中重新定义父类中 已有的变量; 已有的变量;例:
class Car { int color_number; int door_number=2; int speed=100; public void push_break() { speed = 0; } } class Trash_Car extends Car { double amount; String color_number=“四个”; 四个” 四个 int speed=300; public void fill_trash() { … }

03_面向对象高级特性

03_面向对象高级特性

面向对象高级特性python.Style讲师:郭帆西安西部开源教育科技有限公司类属性与实例属性类方法与静态方法property 类属性目录Contents 单例模式01类属性与实例属性类属性与实例属性类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。

在前面的例子中我们接触到的就是实例属性(对象属性),它不被所有类对象的实例对象所共有,在内存中的副本个数取决于对象个数。

02类方法与静态方法类方法是类对象所拥有的方法,需要用修饰器一般以@classmethod来标识其为类方法, 1). 对于类方法,第一个参数必须是类对象,作为第一个参数(cls是形参,可以修改为其它变量名,但最好用'cls'了)2). 能够通过实例对象和类对象去访问。

静态方法需要用修饰器一般以@staticmethod来标识其为静态方法, 1). 静态方法不需要多定义参数2). 能够通过实例对象和类对象去访问。

04property类属性property类属性什么是property属性?一种用起来像是使用的实例属性一样的特殊属性,可以对应于类的某个方法。

property属性的定义和调用要注意一下几点:1.定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数2.调用时,无需括号property类属性类属性应用需求:对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据这个分页的功能包括:•根据用户请求的当前页和总数据条数计算出 m 和 n•根据m 和 n 去数据库中请求数据property类属性property属性的有两种方式:•装饰器即:在方法上应用装饰器•类属性即:在类中定义值为property对象的类属性注意:•经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法•新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法04单例模式对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。

第七章面向对象高级特性

第七章面向对象高级特性

Java编程基础 编程基础 ——面向对象高级特性 面向对象高级特性1第七章 面向对象高级特性目标: 目标 Java中的静态,类的继承,封 中的静态, 中的静态 类的继承, 装,多态,方法的重载与覆盖。

多态,方法的重载与覆盖。

抽象类及接口的概念与使用。

抽象类及接口的概念与使用。

Java中的包及类路径。

引用数据 中的包及类路径。

中的包及类路径 类型的转换。

包装类及内部类。

类型的转换。

包装类及内部类。

访问权限修饰符的使用。

访问权限修饰符的使用。

final关 关 键字。

键字。

时间: 时间:学时 教学方法: 教学方法:2本章要点• • • • • • • • • •static的含义 继承的规则 子类实例化的过程 方法的覆盖 final关键字 抽象类的特性 接口的规范 数据类型的转换 包和访问权限修饰符 包装类和内部类3静态修饰符static 静态修饰符•static可以修饰的元素 – 属性 – 共享 – 方法 – 访问的方式 – 块 – 执行的时机 – 只能修饰类成员,不能修饰局部变量4静态属性NonstaticDemo.java、StaticDemo.java 、 静态存储区 3.14 pi所有对象共享 – 也称为类变量 • 两种方式访问: – 类名.属性 – 对象名.属性•0x3000 200 radius…… 0x8000 100 Circle q Circle p 0x3000 0x8000 radius5静态属性•静态属性描述了类的所有对象的共同特征; 静态属性描述了类的所有对象的共同特征; 非静态属性描述的是每个对象独有的特征; 非静态属性描述的是每个对象独有的特征;静态属性与非静态属性的对比: 序号 1 2 3 4 静态属性 多个对象共享同一个属性 该属性隶属于类 类变量 对象.属性 / 类.属性 非静态属性 每个对象独享一个属性 该属性隶属于每个实例 实例变量 对象.属性•静态属性在该类第一次被加载到虚拟机时,分配静态存储区,以后 每次运行不再分配空间。

面向对象程序设计 类的高级特性

面向对象程序设计 类的高级特性
24
内部类
• 内部类为非静态的嵌套类。 • 在类中定义的类称为内部类。 • 内部类之外的类称为外部类。
• 内部类可以访问其外部类的所有变量和方 法,并能够以和外部类的其他非静态成员 相同的方式直接引用它们。 • 内部类完全在其包围类的范围之内。
25
总结
• 类中的静态变量、方法或代码块并不具体 到实例,它们可以与类的名称一起使用, 而无需创建类的对象来访问类的静态特性。 • final 修饰符可应用于类、方法和变量。 • 定义抽象类的目的是提供可由其子类共享 的一般形式。 • 接口就是需要由其他类实现的行为模板。
2
目标
• 掌握类的静态成员 • 掌握final关键字用法 • 掌握抽象类的定义和用法 • 掌握接口的定义和用法 • 掌握高级访问控制 • 了解内部类的概念
3
类的静态成员
用static修饰符修饰, 可以是变量、方法或代 码块
• 类中的静态变量、方法或代码块属于类, 而不属于某个特定的对象。 • 类的静态成员可以与类的名称一起使用, 而无需创建类的对象。
class TestFinal { final void f() {} } class Further extends TestFinal { final void f(){} final方法不能 } 被覆盖
9
final 变量
• 一个变量可以声明为final,这样做的目的 是阻止它的内容被修改。 • 声明final变量后,只能被初始化一次,然 后就不能对其值进行修改。 • 一个final变量实质上是一个常量。
7
final 关键字/final类
• final 修饰符可应用于类、方法和变量。 • final在应用于类、方法和变量时意义是不 同的,但本质是一样的:final表示不可改 变。 • 声明为final的类不能被继承。 final class TestFinal { int i = 7; • final 类示例:

第7章面向对象高级特性上

第7章面向对象高级特性上
1-8
重写父类中的方法
方法的重载是在同一个类中实现两个或两个以上的方法名相同而参数列 表不同的方法。在使用继承过程中,不但可以使用方法重载,还可以实现方 法的重写。
在继承中,子类不但可以继承自父类中的属性和方法,还可以增加子类 自身的属性和方法。子类可以通过成员变量的隐藏和成员方法的重写,把父 类的属性和方法改变为子类自身的属性和方法。如果子类中定义的方法使用 的方法名、返回类型和参数列表与父类中的方法一样,则称为子类的方法重 写了父类方法。
1-2
访问权限控制(访问权限控制修饰符)(二)
类内 包内 子类 任意public可以 可以 可以 可以
protected 可以 可以 可以 不
默认
可以 可以 不

private 可以 不
不不
1-3
javaBean(POJO)
不是语法,是企业开发为了开发方便,习惯性的编码规范 特点:
1) 类必须要放到一个包下面
本章重点
掌握封装的概念 掌握继承的基本概念。 掌握子类对象的实例化过程。 掌握super关键字的各种用法及其作用,比较this和super
异同。 掌握重写的概念和实现方式,比较重载和重写的异同。 掌握向上转型和向下转型的概念及其实现方式。 理解instanceof关键字的作用。
1-1
访问权限控制(一)
明确的调用父类中的有参数的构造方法 4)super:曾经的,过去的,可以在子类的构造方法中使用
super来调用父类中的构造方法 5)一般企业开发中,都会在父类中写一个空参的构造方法,避免子类继承父类的 出现问题
1-6
this和super
1) this :当前的,现在的 super:曾经的,过去的

part07 面向对象高级特性

part07 面向对象高级特性

7.2.1 重载 一组具有相似功能的方法可以共享相同的方法 名。我们把一个类中存在名字相同的多个方法 的现象称为重载。重载的方法要求方法名相同, 但是各个方法所带参数的个数不同或者当个数 相同时参数的类型{ System.out.println("eat at :"+h.place); } void eat(Restaurant r){ System.out.println("eat at :"+r.place); }
在构造方法中默认的存在着第一条语句: super(); 在这里,super代表了父类的构造方法名,所 在这里,super代表了父类的构造方法名,所 以调用的是父类中无参的那个构造方法。
下面的代码在编译时出错,原因是父类没有提 供一个无参的构造方法。 class SubClass extends SuperClass{//编译出错 SuperClass{//编译出错 } class SuperClass{ SuperClass(int i){} }
第7章 面向对象高级特性
福建农林大学 计算机与信息学院
7.1 继承
继承(extends)是指从已有的类中吸收某些特性 继承(extends)是指从已有的类中吸收某些特性 或全部特性而产生出一个新的类。原有的类称 为父类(或称超类),新的类称为子类( 为父类(或称超类),新的类称为子类(或派生 类)。子类可以直接继承父类的特性,又允许 子类发展自己的个性。 如果以原有类为基础产生出新的类,我们可以 说子类继承了父类,也可以说父类派生出子类。 派生新类(继承)的过程一般包括子类吸收父 类已有成员、修改父类成员和添加新成员三个 步骤。
Overload(int x){ i=x; } Overload(int x,int y){ //在这之前不能有任何的语句 //在这之前不能有任何的语句 this(x+y);//正确的形式 this(x+y);//正确的形式 //Overload(1); 错误的形式 }

06面向对象——高级特性

06面向对象——高级特性
• 问题:
– 用Student对象保存学生信息,希望每个对象有一个 单独的编号。第一个创建的对象编号为1,第二个对 象编号为2,以此类推。 – 这就需要有一个所有Student对象都能访问的变量 counter,而且变量counter在所有实例中共享。当一 个对象创建时,构造函数增加counter值,下一个对 象创建时使用增加过的值。
– final类不能派生子类,如ng.String。 – final方法不能被覆盖,Java在调用时采用代码复制的方法,即 把方法的实现代码全部复制到代码调用的地方。 – final变量是常数,如果将引用类型(即,任何类的类型)的变 量标记为final,那么该变量不能指向任何其它对象。但可能改 变对象的内容,因为只有引用本身是final。 – final变量必须在使用它们前进行初始化,可以在定义时进行初 始化,也可以在运行时进行初始化。一旦final变量完成初始化 则它在该对象整个生命周期里保持不变。
public abstract class Drawing { public abstract void drawDot(int x, int y); public void drawLine(int x1, int y1, int x2, int y2){ for ( x = x1; x <= x2; x++){…} …// draw using the drawDot() method } }
• 当类和子类的对象混合创建时,统一编号。
final关键字-问题
• 问题:
– 要声明一个常量,如PI,E等。 – 要声明一个方法,不希望被子类覆盖。 – 要声明一个类,不希望派生子类。如String类。
• 解决:
– 在变量、方法和类声明时添加final关键字。

面向对象的高级特性_参考答案

面向对象的高级特性_参考答案

Ⅰ.选择题1、给定下列代码:B当在第6行加入什么方法时会引起编译错误?2、给定以下代码:B执行后的结果是?A. 打印字符串“T ested”B. 编译失败C. 代码运行成功但无输出D. 运行时抛出异常3、MAX_LENGTH是int型public成员变量, 变量值保持为常量100,用简短语句定义这个变量?( CD )A. public int MAX_LENGTH=100;B. final int MAX_LENGTH=100;C. final public int MAX_LENGTH=100;D. public final int MAX_LENGTH=100.4、给出以下代码,请问该程序的运行结果是什么?(B)1.class A { static void foo(int i ) {};}2. class B extends A{ void foo( int i ){};}A 第1行编译错误。

B 第2行编译错误。

C 代码编译成功。

//静态方法不能被重写4、有关类的说法正确的是(B)A.类具有封装性,所以类的数据是不能被访问的B.类具有封装性,但可以通过类的公共接口访问类中的数据C.声明一个类时,必须使用public修饰符D.每个类中必须有main方法,否则程序无法运行5、将类的访问权限设置为默认的,则该成员能被(A)A. 同一包中的类访问B.其他包中的类访问C.所有的类访问 D.所有的类的子类访问6、假设下面的程序代码都放在MyClass.java文件中,(D)程序代码能够编译通过。

A.import java.awt.*;package mypackage;calss MyClass{ }B.package mypackage;import java.awt.*;public class myClass{ }C.int m;package mypackage;import java.awt.*;class MyClass{ }D./*This is a comment*/package mypackage;import java.awt.*;public class MyClass{ }7、假设在java源程序文件“MyClass.java”中只含有一个类,而且这个类必须能够被位于一个庞大的软件系统中的所有java类访问到,那么下面(C )声明有可能是符合要求的类声明。

面向对象程序设计类的高级特性

面向对象程序设计类的高级特性

加强与其他机构的合作
与更多的培训机构和专家合作,共同 开展更具影响力和效果的培训项目。

行动计划
制定详细的培训计划
根据参与者的需求和反馈,制定更加详 细的培训计划,包括培训内容、时间安
排等。
建立反馈机制
建立有效的反馈机制,及时收集参与 者的意见和建议,以便不断改进培训
效果。
组织定期的培训活动
定期组织类似的培训活动,使更多的 参与者能够从中受益。
校园趣事多培训资料
• 引言 • 校园趣事分享 • 校园生活感悟 • 培训总结与展望
01
引言
主题介绍
校园趣事多
本培训资料以校园生活为主题,通过 趣事分享、互动游戏等形式,帮助参 与者更好地了解校园文化、提高沟通 技巧、增强团队协作能力。
培训目标
通过本培训,参与者将能够:了解校 园文化,提高沟通技巧,增强团队协 作能力,培养积极心态和乐观精神。
04
培训总结与展望
总结收获
团队合作能力提升
通过培训中的各种团队活动, 参与者学会了更好地与他人协
作,提升了团队协作能力。
沟通技巧增强
培训中强调了有效沟通的重要性 ,并提供了沟通技巧的练习,使 参与者能够更好地与人沟通。
自信心提升
通过完成挑战和克服困难,参与 者的自信心得到了显著提升,使 他们更有信心面对未来的挑战。
02
互相支持
在校园生活中,同学之间应该 互相支持、鼓励和帮助。当我 们遇到困难时,同学和朋友的 支持和鼓励能够让我们更加勇 敢地面对困难。
03
共同成长
04
在校园生活中,我们应该与同学 共同成长、共同进步。通过互相 学习、交流经验,我们可以不断 提高自己的能力,实现自己的目 标。

面向对象高级特性

面向对象高级特性
JAVA编程基础 —— 面向对象高级特性
第七章 面向对象高级特性
目标: 介绍Java中类的继承,封装, 多态,方法的覆盖,抽象类、 接口及内部类等面向对象的高 级特性。通过本课的学习,学 员应该掌握如下知识: 1)类的继承、封装、多态 2)抽象类及接口 3)引用数据类型的转换 4)访问权限修饰符的使用 5)final关键字
答案:B
方法的覆盖
☻ 练习
给定类
class A { int method1(int a, double b) { return 0; }
,在其子类中
下列哪些覆盖方法可以正确的声明_____
A. int method1(int a, double b) { return 1; } B. int method1(int a, long b) { return 1; } C. int method1(int b,double a){return 1;} D. short method1(int a, double b) { return 1: } E. int method1(double b, int a) { return 1; }

import导入包中的类

访问其它包中的类
包名.路径名
package test; class Cat extends p08.Animal{…}
使用import关键字引入其它包中的类
package test; import p08.Animal; class Cat extends Animal{…}
引用类型的转换 方法的覆盖
封装
• •
信息隐藏,隐藏对象的实现细节,不让用户看到 将东西包装在一起,然后以新的完整形式呈现出来 – 例如,两种或多种化学药品组成一个胶囊 – 将方法和属性一起包装到一个单元中,单元以类的形式实现

Java面向对象高级特性

Java面向对象高级特性

} }
不能访问非静态成员类Student
精选课件
的构造方法
30
局部内部类
在方法中定义的内部类。只能访问方法中常量,和外部内所有成员。 • Public class Outer {
– private int out_i = 1;
– public void f(final int k) {
• final int j = 10; • class Inner {
private-私有的 protected-受保护的
public - 公开的 缺省(default)
(1)类成员的访问控制
权限
修饰符 同一类 同一包 子类 全局
private
Y
default
Y
Y
protected Y
Y
Y
public
Y
2021/3/19
Y
Y
精选课件
Y
27
(2)类的访问控制
权限 修饰符 public default
同一包 Y Y
全局 Y (但需import导入)
2021/3/19
精选课件
28
4.7 内 部 类
• 定义在类中的类,称为内部类,也称为嵌套类。
• 内部类本身是一个类,但它同时又是外部类的一个成员。 • 内部类根据放置的位置和修饰符又可细分为: • --成员内部类 • --局部内部类 • --静态内部类 • --匿名内部类。
第四章
Java面向对象高级特性
2021/3/19
精选课件
1
本章要点
• Static 、final关键字 • 抽象类 • 接口 •包 • 内部类 • 访问控制 • 其它

《面向对象高级特性》课件

《面向对象高级特性》课件
单例模式的优点和缺点
优点是可以确保全局只有一个实例,方便管理和控制;缺点是可能会造成内存泄漏等问题,需要注意及时销毁实例。
延时符
面向对象设计原则
总结词
一个类应该只有一个职责,即只负责一项功能或业务逻辑。
总结词
一个方法应该只做一件事。
详细描述
在单一职责原则中,一个方法应该只做一件事情,这样可以提高代码的可读性和可维护性。如果一个方法做了多件事情,那么应该将其拆分成多个方法。
代理模式的应用场景
代理模式的优点和缺点
单例模式
单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式通常用于创建全局变量或者管理全局资源。
单例模式的实现方式
常见的单例模式实现方式有饿汉式、懒汉式、双重校验锁等。其中饿汉式是在类加载时就完成了实例的创建,懒汉式是在第一次调用时才创建实例,双重校验锁则是利用了volatile关键字和synchronized关键字来确保线程安全。
代理模式
代理模式是一种设计模式,通过在客户端和目标对象之间引入一个代理对象,来控制对目标对象的访问。代理对象可以在客户端和目标对象之间起到中介的作用。
当需要在客户端和目标对象之间增加一些额外的操作时,可以使用代理模式。例如,在Web开发中,可以使用代理模式来缓存请求结果、对请求进行加密等操作。
优点是可以控制对目标对象的访问,增加了系统的灵活性和安全性;缺点是会增加系统的复杂度,并且在使用代理模式时需要小心处理代理对象的生命周期。
02
对象是现实世界实体的抽象,具有属性(数据元素)和方法(行为或功能)。
封装
01
封装是将对象的属性和方法绑定在一起,隐藏对象的内部状态,只通过对象提供的公共接口来访问对象。封装可以提高代码的安全性和可维护性。

面向对象的高级特性

面向对象的高级特性
在Java中,使用关键字`extends`来声明一个类继承另一个类。在 Python中,使用关键字`class`和冒号来定义一个子类。
多态
多态是面向对象编程的另一个重要特性,它允许一个 接口被多种数据类型实现。多态使得程序在处理对象
时更加灵活和可扩展。
输标02入题
在多态中,父类引用指向子类对象,通过父类引用来 调用子类的方法。在运行时,JVM根据实际对象的类 型来决定调用哪个方法。
实现方式
通过工厂类来创建对象,将对象的创建与使用分离。
观察者模式
定义
01
定义对象之间的依赖关系,使得当一个对象状态发生
改变时,其相关依赖对象都会收到通知并自动更新。
适用场景
02 需要实现事件驱动、回调机制等场景。
实现方式
03
通过主题和观察者类实现,主题负责维护状态并通知
观察者。
策略模式
01
定义
定义一系列的算法,并将每个算 法封装起来,使它们可以互相替 换。
用途
用于定义一个接口,让子类去实现具体的功 能。
特点
抽象类可以包含抽象方法和非抽象方法。抽 象方法只有方法签名,没有方法体。
继承
抽象类可以被其他类继承,子类需要实现抽 象类中的所有抽象方法才能被实例化。
接口
定义
接口是一种完全抽象的类,用 于规定一组方法,但不提供具
体实现。
特点
接口中的方法都是抽象的,没 有方法体。接口可以包含字段 、方法、事件等成员。
用途
用于定义一组规范,让实现该 接口的类遵循这些规范。
继承
接口可以被其他接口继承,实 现该接口的类需要实现接口中
的所有方法。
04
异常处理
异常的分类
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JAVA编程基础——面向对象高级特性东软人才实训中心3 Sept. 2008©Neusoft Confidential第七章:面向对象高级特性目标:介绍Java中类的继承,封装,多态,方法的重载与覆盖。

抽象类及接口的概念与使用。

Java中的包及类路径。

引用数据类型的转换。

包装类。

访问权限修饰符的使用。

final关键字。

教学方法:讲授ppt+上机练习本章要点•类的继承9继承的规则9子类的构造方法9方法的覆盖9final关键字•接口9接口的规范9引用数据类型的转换9多态•Java中的包9包和访问权限修饰符•类的封装Contents1类的继承2接口3Java中的包4类的封装类的继承•类的继承9在Java 中定义一个类时,让该类通过关键字extends 继承一个已有的类,这就是类的继承(扩展)。

9被继承的类称为父类(超类,基类),新的类称为子类(派生类)。

9子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。

使用继承+getDetail()+getSalary()+vehicleAllowance()-name -birth-salary-departmentOfficer类的继承•继承的语法示例Employee.java Worker.java[修饰符] class 子类名extends父类名类的继承•继承的好处¾使编码更高效¾易维护类的继承•继承的规则9Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承9一个父类可以有多个子类9子类继承父类所有的属性和方法,但不继承父类的构造方法示例TestWorker.java类的继承•子类的构造方法—子类不能继承父类的构造方法9使用默认的构造方法9在子类中的创建构造方法示例Worker.java¾在子类中创建构造方法时,必须调用父类的构造方法¾子类可以在自己的构造方法中使用super关键字来调用父类的构造方法super (参数1,参数2,…);¾如果使用super关键字调用父类构造方法,必须写在该子类构造方法的第一行¾如调用的是父类中无参的构造方法,则可以不写super( )¾如果子类中调用了父类无参的构造方法,而父类中没有无参构造方法则系统编译出错类的继承•方法的覆盖(override)9重写(rewrite)9对从父类中继承来的方法进行改造9在子类继承父类时发生•方法覆盖的规则9在子类中的覆盖方法与父类中被覆盖的方法应具有¾相同的方法名¾相同的参数列表(参数数量、参数类型、参数顺序都要相同)¾相同的返回值类型¾子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限示例Worker.java类的继承•final关键字9final可以修饰的元素:¾类:不能被继承¾变量(属性和局部变量):不能被重新赋值–在声明时赋值,或在构造方法中赋值–系统不会对final属性默认的赋初始值¾方法:不能在子类中被覆盖,即不能修改。

示例Final.java TestFinal.javaContents1类的继承2接口3Java中的包4类的封装•抽象方法9只有方法声明,没有方法实现的方法[访问权限修饰符]abstract 返回值类型抽象方法名(参数列表);class A {abstract int method1(int a, int b);}•抽象类9抽象类是抽象方法和非抽象方法的集合[访问权限修饰符]abstract class 类名{……}9特殊情况¾全部是抽象方法¾全部为非抽象方法abtract class A {String name;abstract int method1(int a, int b);void sayHi( ){System.out.println(“Hello!”);}•抽象类9注意:¾抽象类不能被实例化;¾其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;¾抽象方法不能为static;9在下列情况下,一个类必须声明为抽象类:¾当一个类的一个或多个方法是抽象方法时;¾当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;¾当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;•接口的声明示例AudioDevice.java VideoDevice.java 9接口是常量和抽象方法的集合,而没有变量和方法的实现[访问权限修饰符]interface 接口名{接口的成员}9接口的成员:¾常量(字段)¾抽象方法•接口的声明interface Runnable{public abstract void run();}•注意:9接口不是一个类,没有构造方法,不能被实例化9接口使用interface关键字来定义,而不是class9接口默认:¾常量:public static final¾抽象方法:public abstractextends interface A extends B { }interfaceinterfaceinterface extends interface A extends B, C, D { }interface extends •扩展接口(接口的继承)示例VADevice.java•类实现接口—implements9为了使用一个接口,你要编写实现接口的类9如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。

否则这个类只能声明为抽象类9多个无关的类可以实现一个接口,一个类可以实现多个无关的接口9一个类可以在继承一个父类的同时,实现一个或多个接口示例Television.java•类的单继承与多实现•类实现接口☻示例Student.java Consumer.java Person.java9有一个Student类9该类继承了Person类,并实现了Consumer接口9该类具有String类型的属性school9并有一个study方法,在该方法中,系统可打印出学生在那所学校学习9并创建一个测试方法,测试Student类•接口的意义:9接口可以实现多继承:¾用接口可以实现混合类型(主类型,副类型),java 中可以通过接口分出主次类型¾主类型使用继承,副类型,使用接口实现9接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性¾针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。

•引用数据类型的转换(对象造型) 示例:TestStudent.java9向上转型(Upcasting)—子类转换为父类,自动转换;¾前提—具有继承或实现关系¾向上转换损失了子类新扩展的属性和方法仅可以使用从父类中继承的属性和方法•引用数据类型的转换示例:TestStudent.java9向下转型(Downcasting):强制转换¾将父类对象显示的转换成子类类型。

Animal a = new Cat( );Cat c = (Cat)a;•instanceof运算符9判断一个类是否实现了某个接口对象instanceof接口9判断一个实例对象是否属于一个类对象instanceof类9它的返回值是boolean型的示例TestStudent.java•多态(动态绑定、晚绑定Polymorphism)9在Java中,相同类型的变量,调用相同的方法,执行的具体代码却不同的现象,称之为多态。

¾多种表现形态9多态存在的三个必要条件¾要有继承,或实现¾要有重写¾父类引用指向子类对象一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法9在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法•多态的优点9简化代码9改善代码的组织性和可读性9易于扩展☻示例Parker.java Vehicle.java Bus.java Truck.java Car.java 9在停车场收费系统中,收费者会根据车型的不同收取不同的停车费,其中,¾客车:15元/小时¾货车:12元/小时¾轿车:8元/小时编写java程序完成此功能Contents1类的继承2接口3Java中的包4类的封装•包的概念及应用9在Java中,包主要有以下用途:¾包允许将类组合成较小的单元¾有助于避免命名冲突¾包允许在更广的范围内保护类、数据和方法9包可以是类、接口和子包的集合•包的概念及应用9将类放入包中package包名;9注意:¾在java中位于包中的类,在文件系统中的存放位置,必须有与包名层次相对应的目录结构¾package语句作为java源文件的第一条语句¾每个源文件只能声明一个包¾如果没有package语句,则默认为无名包•访问其它包中的类9包名.路径名package test;class Cat extends p08.Animal{…} 9使用import关键字引入其它包中的类package test;import p08.Animal;class Cat extends Animal{…} 9位于同一包中的类可以直接访问•访问其他包中的类9导入包中所有的类import包名.*;9导入子包中所有的类import包名.子包名.*;9导入包中的某个类import包名.子包名.类名;•JDK中常用的包ng¾Java语言包(包含String、Math、System等类),任何类中,该包中的类都会被自动导入。

9java.util¾包含一些实用的工具类(包含list, calendar, date等类)9java.awt¾图形用户界面包。

9java.io¾提供多种输入/输出功能的类。

•访问权限修饰符9用来控制类的成员和类的使用范围¾类成员的访问权限修饰符:private 、default(friendly)、protected 、public¾类的访问权限修饰符:public 、default(friendly)示例:Access.java TestAccess.java√√√同包子类√不同包无继承关系类√√不同包子类√√√同包无继承的关系类√√√√类内部publicprotecteddefaultprivate•访问权限修饰符Contents1类的继承2接口3Java中的包4类的封装类的封装•类的封装9将类的成员变量声明为私有的(private),再提供一个或多个共有(public)方法实现对该成员变量的访问或修改,这种方式就被称为封装•封装的目的9隐藏类的实现细节9让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作9便于修改,增强代码的可维护性9可进行数据检查示例Employor.java TestEmployer.javaCopyright ©2008 版权所有东软集团。

相关文档
最新文档