1、面向对象编程(Java ) 实验教学大纲内 容子类与继承 三种人 .11、 相关知识点 .12、 实验目的 .13、 实验要求 .14、 实验指导 .2子类与继承 计算利息 (2014.11.20).31、 相关知识点 .32、 实验目的 .33、 实验要求 .34、 实验指导 .45、 思考题 .4组件及事件处理 布局与日历 (2014.11.28).51、 相关知识点 .52、 实验目的 .53、 实验要求 .54、 实验指导 .65、 思考题 .61 / 8面向对象编程(Java ) 实验教学大纲子类与继承 三种人1、 相关知识点由继承而得到的类称为子类,被继承的类称为父类(超类),Ja
2、va 不支持多重继承,即子类只能有一个父类。人们习惯地称子类与父类的关系是“is-a ”关系。如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是 private 的成员变量作为自己的成员变量,并且也自然地继承了父类中不是 private 的方法作为自己的方法。继承的成员变量或方法的访问权限保存不变。子类和父类不在同一个包中时,父类中的 private 和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的 protected 和 public 访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的 protected 和 public 访问权限的方法作为子类的方
3、法。子类声明的成员变量的名字和从父类继承来的成员变量的名字相同时,将隐藏所继承的成员变量。方法重写是指子类中定义的一个方法,这个方法的类型和父类的方法的类型一致或者是父类方法的类型的子类型,并且这个方法的名字、参数个数、参数类型和父类的方法完全相同。子类如此定义的方法称为子类重写的方法。子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量。重写方法既可以操作继承的成员变量,调用继承的方法,也可以操作子类新声明的成员变量,调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。2、 实验目的本实验的目的是让学生巩固下列知识点: 子类的继承性 子类对象的创建过程 成员变量的继承与隐藏
4、 方法的继承与重写3、 实验要求编写程序模拟中国人、美国人、北京人。除主类外,程序中有 4 个类:People、 ChinaPeople、AmericanPeople 和 BeijingPeople,要求如下: People 类有权限是 protected 的 double 类型的成员变量:height 和 weight,以及public void speakHello()、public void averageHeight()和 public void averageWeight()方法。 ChinaPeople 类是 People 的子类,新增了 public void chinaGong
5、fu()方法。要求ChinaPeople 重写父类的 public void speakHello()、public void averageHeight()和public void averageWeight()方法。 AmericanPeople 类是 People 的子类,新增了 public void americanBoxing()方法。要2 / 8面向对象编程(Java ) 实验教学大纲求 AmericanPeople 重写父类的 public void speakHello()、public void averageHeight()和 public void averageWei
6、ght()方法。 BeijingPeople 类是 ChinaPeople 的子类,新增了 public void beijingOpera()方法。要求 BeijingPeople 重写父类的 public void speakHello()、public void averageHeight()和public void averageWeight()方法。People、ChinaPeople、AmericanPeople 和 BeijingPeople 类的 UML 图如下:4、 实验指导 如果子类 继承父类的方法,子类就有权利重写这个方法,子类通过重写父类的方法可以改变方法的具体行为。
7、方法重写时一定要保证方法的名字和类型、参数个数和类型同父类的某个方法完全相同,只有这样子类继承的父类的这个方法才被隐藏。 子类在重写方法时,不可以将实例方法更改为类方法,也不可以将类方法更改为实例方法。即如果重写的方法是 static 方法, static 关键字必须要保留;如果重新的方法是实例方法,重写时不可以使用 static 修饰该方法。3 / 8面向对象编程(Java ) 实验教学大纲子类与继承 计算利息 (2014.11.20)1、 相关知识点子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字 super 所拥有,同样,子类一旦重写了继承的方法,就覆盖
8、(隐藏)了继承的方法,那么子类创建的对象就不能调用被覆盖(隐藏)的方法,该方法的调用由关键字 super 负责。因此,如果在子类中想要使用被子类隐藏的成员变量或覆盖的方法就需要使用关键字 super。比如:super.x、super.play()就是访问和调用被子类隐藏的成员变量 x 和方法 play()。2、 实验目的本实验的目的是让学生掌握重写的目的以及怎样使用 super 关键字。 子类的继承性 子类对象的创建过程 成员变量的继承与隐藏 方法的继承与重写3、 实验要求假设银行 Bank 已经有了按整年 year 计算利息的一般方法,其中 year 只能取正整数。例如:按整年计算的方法:d
9、ouble computerInterest() interest = year * 0.35 * saveedMoney;return interest;建设银行 ConstructionBank 是 Bank 的子类,准备隐藏继承的成员变量 year,并重写计算利息的方法,即自己声明一个 double 型的 year 变量,例如:当 year 取值是 5.216 时,表示要计算 5 年零 216 天的利息,但希望首先按银行 Bank 的方法 computerInterest()计算出 5 整年的利息,然后再自己计算 216 天的利息(注意:每天的利息按 0.001 计算)。那么建设银行就必
10、须把 5.216 的整数部分赋给隐藏的 year,并让 super 调用隐藏的、按整年计算利息的方法。要求 ConstructionBank 和 CommericalBank(注意:每天的利息按 0.002 计算)是 Bank 的子类,都使用 super 调用隐藏的成员变量和方法。其中,三个类的 UML 图如下所示:4 / 8面向对象编程(Java ) 实验教学大纲4、 实验指导 当 super 调用被隐藏的方法时,该方法中出现的成员变量是被子类隐藏的成员变量或继承的成员变量。 子类不继承父类的构造方法,因此,子类在其构造方法中需要使用 super 类调用父类的构造方法,而且 super 必须
11、是子类构造方法中的头一条语句,即如果在子类的构造方法中没有明显地写出 super 关键字来调用父类的某个构造方法,那么默认地有super()。类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略 super 时出现错误。5、 思考题 Super 和 this 的区别? Super 在使用时应该注意的事项?5 / 8面向对象编程(Java ) 实验教学大纲组件及事件处理 布局与日历 (2014.11.28)1、 相关知识点当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。常用的布局类有 java.awt 包中的 FlowLayout、BorderLa
12、yout、CardLayout、GridLayout 和java.swing.border 包中的 BoxLayout 布局类。2、 实验目的本实验的目的是学习使用布局类进行组件布局,设计满足不同需求的界面。3、 实验要求编写一个应用程序,有一个窗口,该窗口的布局为 BorderLayout 布局。窗口的中心添加一个 JPanel 容器 pCenter,pCenter 的布局是 7 行 7 列的 GriderLayout 布局,pCenter 中放置 49 个标签,用来显示日历。窗口的北面添加一个 JPanel 容器 pNorth,其布局是 FlowLayout 布局,pNorth 放置两个按
13、钮:nextMonth 和 previousMonth。单击 nextMonth 按钮,可以显示当前月的下一个月的日历;单击 previousMonth 按钮可以显示当前月的上一个月的日历。窗口的南面添加一个 JPanel 容器 pSouth,其布局是 FlowLayout 布局,pSouth 中放置一个标签用于显示日历信息。程序运行效果图如下:6 / 8面向对象编程(Java ) 实验教学大纲其中,UML 类图如下所示:4、 实验指导 BorderLayout 是一种简单的布局策略,如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。每加入一个组件都应该指明把这个组件添加到哪个区域中,区域有 BorderLayout 中的静态常量CENTER、NORTH 、SOUTH 、WEST 、EAST 表示。 GridLayout 是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行*若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout 比较灵活,划分多少网格有程序自由控制,而且组件定位也比较精确。5、 思考题 如何以不同颜色显示当前日期,如 2014.11.20 日,将 20 以不同的颜色显示。 如何两个文本框,直接输入年和月,以快速显示日历。7 / 8面向对象编程(Java ) 实验教学大纲