第4章 Java面向对象编程(下精品PPT课件
合集下载
第四Java面向对象编程基础-PPT文档资料
4-15
–
类中变量的默认初始化
•
Java中,一个类中如果没有定义构造方法,则编 译器会自动生成一个没有参数的构造方法,用来初 始化类对象,并将类中变量自动初始化为该类型的 默认值:
Programming in Java
4-16
• • • • •
① 整型初始化为0; ② 实型初始化为0.0f、0.0d; ③ 逻辑型初始化为false; ④ 字符型初始化为'\u0000'; ⑤ 类对象初始化为null,表明不指向任何内存地 址的引用 • 如果类中定义了构造方法,则不会自动生成没 有参数的构造方法。
创建对象
1. 格式: 类名 新建对象名 =new 构造函数(参数 ); eg: 1. Phonecard mycard=new phonecard()
4-9
Programming in Java
4-10
2 使用对象的数据和方法
public class testcircle {public static void main(String[] args) {circle mycircle = new circle(); System.out.println("the area of the circle of radius"+mycircle.radius+"is"+mycircle.findarea());}} class circle { double radius=1.0; double findarea() {return radius*radius*3.14159;}} objectname.method引用对象的方法 objectname.data引用对象的数据
ch04Java面向对象编程技术.ppt
❖ 在Java语言中,类是封装的最基本单位。 ❖ 封装有助于提高类和系统的安全性。
8
• 面向对象的基本特性
2.继承性
❖ 继承是类不同抽象级别之间的关系,是子类自动共享父类数据和 方法的机制。
3.多态性
❖ 对象根据所接收的消息产生行为,同一消息为不同的对象接收时 可产生完全不同的行动,这种现象称为多态性。
❖ 对象(Object)就是客观存在的任何事物。
2.类
❖ 类(class)是对象的模板。即类是对一组有相同静 态特性和相同动态行为的对象的抽象,一个类所包 含的属性和方法描述一组对象的共同属性和行为。 类是在对象之上的抽象,对象则是类的具体化,是 类的实例。
6
• 面向对象的基本概念
3.接口
❖ 如果我们把客观世界看成由不同的系统(或类)组 成,这些系统(或类)之间需要通过一个公共的部 件进行交流,我们把这个公共的部件称为接口( Interface)。
第4讲 Java面向对象编程技术
授课课时:8课时(360分钟) 主编:刘志成
主要内容
•本课目标 •新课引入与项目展示 •案例1 —编写描述学生的Java类 •案例2 —编写描述大学生的Java类 •案例3 —方法重载与方法重写 •案例4 —定义形状 •案例5 —实现电视机遥控器 •案例6 —读取队列元素 •案例7 —操作字符串 •课堂实践 •巩固与提高
11
• 课堂演示-编写描述学生的Java类
❖ 学生对象分析
项目 属性 方法
名称 sName bGender iAge dHeight dWeight iCounter setInfo getInfo getCounter
含义 表示学生姓名,String类型 表示学生性别,boolean类型,false代表"女"
8
• 面向对象的基本特性
2.继承性
❖ 继承是类不同抽象级别之间的关系,是子类自动共享父类数据和 方法的机制。
3.多态性
❖ 对象根据所接收的消息产生行为,同一消息为不同的对象接收时 可产生完全不同的行动,这种现象称为多态性。
❖ 对象(Object)就是客观存在的任何事物。
2.类
❖ 类(class)是对象的模板。即类是对一组有相同静 态特性和相同动态行为的对象的抽象,一个类所包 含的属性和方法描述一组对象的共同属性和行为。 类是在对象之上的抽象,对象则是类的具体化,是 类的实例。
6
• 面向对象的基本概念
3.接口
❖ 如果我们把客观世界看成由不同的系统(或类)组 成,这些系统(或类)之间需要通过一个公共的部 件进行交流,我们把这个公共的部件称为接口( Interface)。
第4讲 Java面向对象编程技术
授课课时:8课时(360分钟) 主编:刘志成
主要内容
•本课目标 •新课引入与项目展示 •案例1 —编写描述学生的Java类 •案例2 —编写描述大学生的Java类 •案例3 —方法重载与方法重写 •案例4 —定义形状 •案例5 —实现电视机遥控器 •案例6 —读取队列元素 •案例7 —操作字符串 •课堂实践 •巩固与提高
11
• 课堂演示-编写描述学生的Java类
❖ 学生对象分析
项目 属性 方法
名称 sName bGender iAge dHeight dWeight iCounter setInfo getInfo getCounter
含义 表示学生姓名,String类型 表示学生性别,boolean类型,false代表"女"
第四章Java面向对象特性课件
第4章 Java面向对象特性
对象的基本概念
面向对象程序语言三个关键特点: 封装 ( Encapsulation ) 多态 ( Polymorphism ) 继承 ( Inheritance )
1
第4章 Java面向对象特性
抽象数据类型
基本数据类型和聚集类型的变量与一些操作 (如+, -)之间不需特殊的联系。 在面向对象语言中,在数据类型的声明与操作
数据隐藏与封装举例
class Date{
private int day, month, year;
void setDate( int a, int b, int c){
day = a;
month = b;
year = c ;
}
}
…
Date d1;
d1=new Date( ); d1.setDate(30,9,2001);
4
第4章 Java面向对象特性
对象生命周期
创建对象 使用对象 清除不用的对象
5
第4章 Java面向对象特性
创建对象
创建对象的三个步骤: 声明 (Declaration ) 实例化(Instantiation) 初始化(Initialization)
例: Point origin_one ; origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100);
public void changeObjValue( PassTest ref){
ref.ptValue = 99.0f; }
对象的基本概念
面向对象程序语言三个关键特点: 封装 ( Encapsulation ) 多态 ( Polymorphism ) 继承 ( Inheritance )
1
第4章 Java面向对象特性
抽象数据类型
基本数据类型和聚集类型的变量与一些操作 (如+, -)之间不需特殊的联系。 在面向对象语言中,在数据类型的声明与操作
数据隐藏与封装举例
class Date{
private int day, month, year;
void setDate( int a, int b, int c){
day = a;
month = b;
year = c ;
}
}
…
Date d1;
d1=new Date( ); d1.setDate(30,9,2001);
4
第4章 Java面向对象特性
对象生命周期
创建对象 使用对象 清除不用的对象
5
第4章 Java面向对象特性
创建对象
创建对象的三个步骤: 声明 (Declaration ) 实例化(Instantiation) 初始化(Initialization)
例: Point origin_one ; origin_one = new Point(23, 94); Rectangle rect_one = new Rectangle(origin_one, 100, 200); Rectangle rect_two = new Rectangle(50, 100);
public void changeObjValue( PassTest ref){
ref.ptValue = 99.0f; }
JAVA面向对象编程PPT课件
如: class People “People” 是类名。习惯上类名的第一个字母大写,
但这不是必须的。
8
2.类体
4.1 类
• 属性 (状态) 通过定义变量来描述 • 行为(功能)通过定义方法来刻画功能。
9
如:定义一个梯形类
class 梯形
{ float 上底,下底,高,laderArea; float 计算面积()
说明: 如果类中没有构造方法,系统会调用默认的构造方
法(默认的构造方法是无参数的)。
22
(3)对象的内存模型
class XiyoujiRenwu
{ float height,weight;
String head, ear,hand,foot, mouth;
void speak(String s)
{ System.out.println(s);
18
class 梯形 { float 上底,下底,高;
梯形() { 上底=60;
下底=100; 高=20;
} 梯形(float x,int y,float h) { 上底=x;
下底=y; 高=h;
} 19
}
课堂练习
编写一个类描述方阵,其中描述方阵的静态 属性包括:维数、内容和动态行为包括:
1 两个n阶方阵的加; 2 两个n阶方阵的减; 3 求方阵的转置矩阵;
类的定义: 成员属性 成员方法
20
4.2 对象的创建与引用
1 创建对象
类是创建对象的模板。当使用一个类创建了一个对象 时,我们也说我们给出了这个类的一个实例。
(1)对象的声明 一般格式为:
类的名字 对象名字; 如: People zhangPing;
21
但这不是必须的。
8
2.类体
4.1 类
• 属性 (状态) 通过定义变量来描述 • 行为(功能)通过定义方法来刻画功能。
9
如:定义一个梯形类
class 梯形
{ float 上底,下底,高,laderArea; float 计算面积()
说明: 如果类中没有构造方法,系统会调用默认的构造方
法(默认的构造方法是无参数的)。
22
(3)对象的内存模型
class XiyoujiRenwu
{ float height,weight;
String head, ear,hand,foot, mouth;
void speak(String s)
{ System.out.println(s);
18
class 梯形 { float 上底,下底,高;
梯形() { 上底=60;
下底=100; 高=20;
} 梯形(float x,int y,float h) { 上底=x;
下底=y; 高=h;
} 19
}
课堂练习
编写一个类描述方阵,其中描述方阵的静态 属性包括:维数、内容和动态行为包括:
1 两个n阶方阵的加; 2 两个n阶方阵的减; 3 求方阵的转置矩阵;
类的定义: 成员属性 成员方法
20
4.2 对象的创建与引用
1 创建对象
类是创建对象的模板。当使用一个类创建了一个对象 时,我们也说我们给出了这个类的一个实例。
(1)对象的声明 一般格式为:
类的名字 对象名字; 如: People zhangPing;
21
第四章 面向对象(下)
信息学院通信与电子信息教研室
Java基础及应用开发
王亚平
总目录
第一章
第二章
第三章
第四章
第五章 第六章 第七章
Java入门 Java编程基础 面向对象(上) 面向对象(下) 多线程 图形用户界面GUI Java编程进阶
本章目标
类的继承 final关键字 抽象类 接口(interface) 对象的类型转换 面向对象的多态性 异常 包(package)
4.9 包
package语句及应用 package语句作为Java源文件的第一条语句。如果没有 package语句,则为缺省无名包。 import语句及应用 jdk中常用的包
– ng----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。 – java.awt----包含了构成抽象窗口工具集(abstract window toolkits) 的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 – java.applet----包含applet运行所需的一些类。 – ----包含执行与网络相关的操作的类。 – java.io----包含能提供多种输入/输出功能的类。 – java.util----包含一些实用工具类,如定义系统特性、使用与日期日历 相关的函数。
4.8 异常 Nhomakorabea异常定义了程序中遇到的非致命的错误, 而不是编译时的语 法错误,如程序要打开一个不存的文件、网络连接中断、 操作数越界、装载一个不存在的类等。 try,catch语句 throws关键字 自定义异常与throw关键字 如何对多个异常作出处理 也可以在一个方法中使用throw,try…catch语句来实现程 序的跳转 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或 异常的子类。 如果父类扔出多个异常,那么重写(覆盖)方法必须扔出 那些异常的一个子集,也就是说不能扔出新的异常。
Java基础及应用开发
王亚平
总目录
第一章
第二章
第三章
第四章
第五章 第六章 第七章
Java入门 Java编程基础 面向对象(上) 面向对象(下) 多线程 图形用户界面GUI Java编程进阶
本章目标
类的继承 final关键字 抽象类 接口(interface) 对象的类型转换 面向对象的多态性 异常 包(package)
4.9 包
package语句及应用 package语句作为Java源文件的第一条语句。如果没有 package语句,则为缺省无名包。 import语句及应用 jdk中常用的包
– ng----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。 – java.awt----包含了构成抽象窗口工具集(abstract window toolkits) 的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 – java.applet----包含applet运行所需的一些类。 – ----包含执行与网络相关的操作的类。 – java.io----包含能提供多种输入/输出功能的类。 – java.util----包含一些实用工具类,如定义系统特性、使用与日期日历 相关的函数。
4.8 异常 Nhomakorabea异常定义了程序中遇到的非致命的错误, 而不是编译时的语 法错误,如程序要打开一个不存的文件、网络连接中断、 操作数越界、装载一个不存在的类等。 try,catch语句 throws关键字 自定义异常与throw关键字 如何对多个异常作出处理 也可以在一个方法中使用throw,try…catch语句来实现程 序的跳转 一个方法被覆盖时,覆盖它的方法必须扔出相同的异常或 异常的子类。 如果父类扔出多个异常,那么重写(覆盖)方法必须扔出 那些异常的一个子集,也就是说不能扔出新的异常。
Java语言04(类和对象)精品PPT课件
2.类的定义格式
类是Java程序的基本单元,当开始编写Java程 序时也就是要开始建立一个类。 类的声明格式如下:
[修饰符] class <类名>[extends 父类名] [implements 接口名] {}
关于修饰符
修饰符分为访问控制符和类型说明 符2个部分,分别用来说明类的访问权 限以及是否为抽象类或最终类。
创建对象
创建对象包括对象声明和对象初始化两部分:通 常这两部分是结合在一起的,即定义对象的同时对其 初始化,为其分配空间,并进行赋值。其格式为:
<类名> <对象名> = new <构造函数> ([参数列表]) 例如:
Circle MyCircle; MyCircle=new Circle(); 或 Circle MyCircle=new Circle();
引用类型
对象是引用类型。引用类型是指该类型 的标识符表示的一片连续内存地址的首地址。 对象定义后系统将给对象标识符为分一个内 存单元,用以存储实际对象在内存中的存储 位置。在没有用new关创建实际对象前,对 象名的值为null。
关键字new的作用
1. 为对象分配内存空间。 2. 引用对象的构造方法为对象初始化。 3. 为对象返回一个引用。
1. class Number//对象赋值示例
2. {
3. int i;Fra bibliotek4. public static void main(String[] args)
5.
{
6.
Number n1=new Number();
7.
Number n2=new Number();
8.
n1.i=9;
面向对象编程PPT课件
4.1.1 对象
现实世界中,对象(object)是状态(属性)和行为 的结合体,对象随处可见。对象普遍具有的特征是状 态和行为。 在开发软件的信息世界中,对象定义为相关数据和方 法的集合。对象是现实世界对象的抽象模型。从现实 世界对象中抽象出来的对象使用数据和方法描述其在 现实世界中的状态和行为特征,一般通过变量描述其 状态,通过方法实现其行为。变量是一种有名称的数 据实体,而方法则是和对象相关的函数或过程。
例4.1 设计一个Applet小程序,使其可以进行简单的 加法运算。
// 源程序名: Addition.java import java.awt.*; import java.awt.event.*; import java.applet.Applet;
4.1.5 继承
面向对象编程允许用一个类定义另外一个类。子类继 承了父类的状态和行为,但并不局限于此。也就是说, 子类可以添加新的变量和方法,有自己的特点。子类 还可以覆盖(override)继承下来的方法,实现特殊 要求。
继承(inheritance)不但可以发生在同一个层次上, 也可以发生在不同层次上。这种继承形成了一棵倒置 的树,从根部开始发芽分支,长成一棵继承树。在 Java系统中这棵树的根就是Object类,所有层次的类 都 是 从 Object 类 那 里 直 接 或 间 接 地 衍 生 下 来 的 。 Object仅提供了所有的类在Java虚拟机上运行时所需 要的基本状态和方法。一般来说,层次越高,类就越 抽象,反之类就越具体。
Java不支持多继承,子类只能有一个父类。有时需要 使用其他类中的方法,但又无法直接继承,在这种情 况下,可以使用接口技术。例如,Java的事件单独放 在一个事件类中,子类一般不直接从这个事件类派生, 而由Applet类派生,但子类运行时需要响应各种事件, 则需要使用事件类的处理方法。
现实世界中,对象(object)是状态(属性)和行为 的结合体,对象随处可见。对象普遍具有的特征是状 态和行为。 在开发软件的信息世界中,对象定义为相关数据和方 法的集合。对象是现实世界对象的抽象模型。从现实 世界对象中抽象出来的对象使用数据和方法描述其在 现实世界中的状态和行为特征,一般通过变量描述其 状态,通过方法实现其行为。变量是一种有名称的数 据实体,而方法则是和对象相关的函数或过程。
例4.1 设计一个Applet小程序,使其可以进行简单的 加法运算。
// 源程序名: Addition.java import java.awt.*; import java.awt.event.*; import java.applet.Applet;
4.1.5 继承
面向对象编程允许用一个类定义另外一个类。子类继 承了父类的状态和行为,但并不局限于此。也就是说, 子类可以添加新的变量和方法,有自己的特点。子类 还可以覆盖(override)继承下来的方法,实现特殊 要求。
继承(inheritance)不但可以发生在同一个层次上, 也可以发生在不同层次上。这种继承形成了一棵倒置 的树,从根部开始发芽分支,长成一棵继承树。在 Java系统中这棵树的根就是Object类,所有层次的类 都 是 从 Object 类 那 里 直 接 或 间 接 地 衍 生 下 来 的 。 Object仅提供了所有的类在Java虚拟机上运行时所需 要的基本状态和方法。一般来说,层次越高,类就越 抽象,反之类就越具体。
Java不支持多继承,子类只能有一个父类。有时需要 使用其他类中的方法,但又无法直接继承,在这种情 况下,可以使用接口技术。例如,Java的事件单独放 在一个事件类中,子类一般不直接从这个事件类派生, 而由Applet类派生,但子类运行时需要响应各种事件, 则需要使用事件类的处理方法。
Java基础案例教程第4章 面向对象(下)
• 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口
之间要用逗号隔开。具体示例如下:
4.3 抽象类和接口
• 一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。具体示例如
下:
• 一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于 implements关键字之前。具体示例如下:
接下来通过一个案例来学习子类是如何继承父类的,请查看教材文件 4-1。
4.1 类的继承
在类的继承中,需要注意一些问题,具体如下:
1.在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能
有多个类可以继承一个父类,例如下面这种情况是允许的。
☞点击查看本小节知识架构
抽象类和接口
☞点击查看本小节知识架构
USB接口程序设计 多态
☞点击查看本小节知识架构
模拟物流快递系统程序设计 异常(Exception)
☞点击查看本小节知识架构
访问控制
知识架构
4.5 异常(Exception)
什么是异常 try…catch和finally throws关键字 运行时异常与编译时异常 自定义异常
案例代码
接下来通过一个案例来学习接口的使用,请查看教材文件4-11。
4.3 抽象类和接口
为了加深初学者对接口的认识,接下来对接口的特点进行归纳,具体如下:
• 接口中的方法都是抽象的,不能实例化对象。
• 接口中的属性只能是常量。
• 当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则 需要实现接口中的所有方法。
4.1 类的继承
重写父类方法
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
...
static void method() {
...
}
}
public class Sub extends Base {
... void method() {
// 编译错误
...
}
}
Java实用教程(第3 版)
4.1.3 方法的重写
(4) 方法重写只针对实例方法,父类中的静态方法,子类只能隐藏、重载 和继承。
(3) 向上转型对象操作子类继承或重写的方法时,就是通知对应的子类对象 去调用这些方法。因此,如果子类重写了父类的某个方法后,对象的向上转型对 象调用这个方法时,一定是调用了这个重写的方法。
4.2 对象的转型
例如,B类是A类的子类或间接子类,当子类B创建一个对象,并把这个对 象赋给类A的引用变量,那么,称这个A类对象a是子类对象b的向上转型的对 象。这个向上转型的对象还可以通过强制类型转换还原成它本来的类型,被称 为对象的向下转型。
class A {}
class B extends A{}
第4章 Java面向对象编程(下)
4.1 继承 4.2 对象的转型 4.3 多态 4.4 抽象类 4.5 接口
4.6 4.7 权限修饰符
4.8 综合实例:航班管理
Java实用教程(第3 版)
4.1 继承
➢ 4.1.1 继承的定义 在Java语言中,用extends关键字来声明一个类继承了另一个类,其语法
(5) 父类中能被子类继承的实例方法,才会在子类中被重写。 (6) 子类重写的方法不能比父类中被重写的方法声明抛出更多的异常。 方法重写和方法重载具有以下相同点: 都要求方法同名。 都可以用于抽象方法和非抽象方法之间。 方法重写和方法重载具有以下不同点: 方法重写要求参数签名必须一致,而方法重载要求参数签名必须不一致。 方法重写要求返回类型必须一致,而方法重载对此不做限制。 方法重写只能用于子类从父类继承的实例方法,方法重载用于同一个类 的所有方法(包括从父类中继承而来的方法)。 方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在 这方面没任何限制。 父类的一个方法只能被子类重写一次,而一个方法在所在的类中可以被 重载多次。 构造方法能被重载,但不能被重写。
Java实用教程(第3 版)
4.1.4 super关键字
若子类重写了父类中的方法或子类隐藏了父类中的数据成员,但又想访 问父类的成员变量和方法,怎么办?解决的办法是使用super关键字。
【例4.4】子类SubClass使用super关键字,访问父类SuperClass的成员变 量和构造方法。
Java实用教程(第3 版)
Java实用教程(第3 版)
4.1.3 方法的重写
子类通过extends关键字声明继承了父类的属性和方法,但子类可能觉得 从父类继承过来的方法不能满足自己的要求,怎么办呢?解决方法是子类可 以重写(或覆盖)父类的方法。例如在下面的代码片段中,子类重写了父类的 run()方法:
class Animal{ …
Java实用教程(第3 版)
4.1.3 方法的重写
(2) 子类重写的方法不能比父类中被重写的方法拥有更严格的访问权限。 例如,在下面的代码片段中,子类试图缩小父类方法的访问权限:
class Base{
...
public void method() ub extends Base {
格式是: <修饰符> class <子类名> extends <父类> { …
} 例如,下面的代码片段定义了一个子类son类,继承了父类farther类:
class father { … } public class son extends father { … }
Java实用教程(第3 版)
4.1.1 继承的定义
注意,Java只支持单继承,例如,下面的son类试图继承两个类:
class grandFather { … } class farther { … } public class son extends farther, grandFather { // 错误,不允许继承两个类 … }
【例4.1】计算箱子的体积和重量。
... private void method() {
// 编译错误,子类方法缩小父类方法的访问权限
...
}
}
Java实用教程(第3 版)
4.1.3 方法的重写
(3) 父类的静态方法不能被子类重写为非静态的方法。同样,父类中的实 例方法也不能被子类重写为静态方法。例如下面的代码片段:
class Base{
Java实用教程(第3 版)
4.1.2 初始化基类
当创建一个子类的对象时,该对象包含了一个基类对象。这个基类对象 与用子类直接创建的对象是一样的。二者的区别在于,后者来自于外部,而 基类对象被包装在子类对象内部。Java虚拟机会确保在子类构造器中调用基类 的构造器来初始化基类。
【例4.2】子类构造器C调用基类的构造器A来初始化基类。
A a;
B b1 = new B(); a = b1; B b2 = (B) a;
向上转型的对象具有如下特点:
// 向上转型 // 向下转型
(1) 向上转型对象不能操作子类新增的成员属性和方法(失掉了这部分功能)。 (2) 向上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继 承的或重写的方法。
void run(){ // 慢跑
} } class Tiger extends Animal {
… void run(){
// 快跑 } }
【例4.3】子类Employee重写父类的getInfo()方法。
Java实用教程(第3 版)
4.1.3 方法的重写
在使用方法重写时,以下几点需要注意。 (1) 子类重写的方法必须与父类被重写的方法具有相同的方法名称、参数 列表和相同或相容的返回值类型,否则不构成重写。如:父类定义了方法: int f(int i){… }。若子类方法重写时写成:byte f(int i){…},由于返回值类型 是Java基本数据类型,必须要相同。因而编译程序会报错。但是,若父类定 义了方法:Object get(){…},子类方法重写时写成Point get(){…},虽然返回 值类型不同,但由于Point是Object的子类,因而是允许的。即对于返回值类 型是引用,则要求相容。这种方式的重写很有用。