实验目的:掌握面向对象继承和多态
1. 运行例 4-1 到 4-6。
例 4-1:
例 4-2:
例 4-3:
例 4-4:
例 4-5:
例 4-6:
2. 运行案例 4-1 到 4-3。
案例 4-1:
案例 4-2:
案例 4-3:
3. 问答题
(1)阅读下面的程序(或程序片段),回答问题 。
现有类说明如下:
class A {
int x = 10;
int GetA() {
return x;
}
}
class B extends A {
int x = 100;
int GetB() {
return x;
}
}问题:
(1)类 A 与类 B 是什么关系?
类 B 继承 类 A,B 是 A 的子类(派生类),A 是 B 的父类(基类)。
(2)类 B 是否能继承类 A 的属性 x?
能。Java 中子类会继承父类的非私有成员变量和方法,本题中父类 A 的属性 x 没有私有修饰。
(3)若 b 是类 B 的对象,则 b.GetA() 的返回值是什么?
返回值:10。原因:GetA() 是父类 A 的方法,方法中访问的 x 是父类自身的 x,不受子类同名变量影响。
(4)若 b 是类 B 的对象,则 b.GetB() 的返回值是什么?
返回值:100。原因:GetB() 是子类 B 的方法,方法中访问的 x 是子类自身定义的 x。
(5)类 A 和类 B 都定义了 x 属性,这种现象称为什么?
称为属性隐藏(成员变量隐藏):子类定义了和父类同名的成员变量,子类的变量会隐藏父类的同名变量。
子类重新定义了和父类一模一样名字的成员变量,不是覆盖父类的,而是自己另造一个,把父类的那个给 “藏起来” 看不见了。
不是把父类 x 删掉,是两个 x 都存在:
父类空间:x = 10
子类自己空间:x = 100
就近原则:在子类方法里直接写 x,默认用子类自己的。
(2)构造方法在类中的作用是什么?
-
创建对象时初始化对象的成员变量,为对象赋初始值;
-
完成对象创建时的必要初始化操作(如资源加载、参数配置);
-
是创建类对象的必须步骤,new 关键字创建对象时会自动调用构造方法。
(3)在创建派生类的对象的时候,基类与派生类中构造方法的调用顺序怎样?
-
默认情况下,子类构造方法会自动先调用父类的无参构造方法;
-
如果父类没有无参构造,子类必须手动通过 super(参数) 调用父类有参构造,且必须放在子类构造方法第一行。
(4)什么是方法的重载?
方法重载:在同一个类中,定义多个方法名相同,但参数列表不同的方法。
重载的核心规则:
-
方法名必须完全相同;
-
参数列表必须不同(参数个数、参数类型、参数顺序任意一项不同);
-
方法的返回值、访问修饰符不影响重载;
-
编译器根据传入的参数自动匹配调用对应的方法。
4. 编程题
编写一个完整的 Java Application 程序。包含类 Circle,类 Cylinder, 类 Test,具体要求如下:
(1)类 Circle
① 属性
radius:double 型,表示圆的半径。
② 方法
Cirle( double r):构造函数,将半径初始化为 r。
double findArea():返回圆的面积。
double getRadius():返回圆的半径。
(2)类 Cylinder
继承Circle类,并有以下属性和方法:
①属性
length:double 型,表示圆柱体的高。
②方法
Cylinder(double r,double l):构造函数,给圆柱体的半径和高赋初值。
double findVolume():返回圆柱体的体积。
toString():返回圆柱体的半径、高、体积等信息。
(3)主类Test
① 生成 Cylinder 对象。
② 调用对象的 toString 方法,输出对象的描述信息。
评论
游客无需注册即可评论。
你提交的昵称、邮箱、网址和评论内容会保存在服务端,用于展示评论身份、接收回复及必要的安全审计。
浏览器会本地保存已填游客信息和评论草稿,方便下次免填。
回复提醒会通过站内消息和邮件通知。