实验三面向对象程序设计基本操作(下)
――继承﹑接口与多态
问题1:定义父类和子类,测试继承关系。
知识点解析:通过示例加深和巩固对继承原则的认识和使用.
示例:示例1 课本例3.4
示例2 补充例3.1动物继承
示例3Cat.java TestExtends.java
问题2:上转型对象\隐藏与覆盖。
知识点解析:通过示例理解并掌握父类与子类继承关系中隐藏和覆盖的用法,掌握上转型对 象调用父类与子类同名变量和同名方法的原则.
示例:示例1课本例3.5
示例2课本例3.6
问题3:super引用。
知识点解析:通过示例掌握super的两种调用方式.
示例:示例1 补充例3.2super引用
示例2 | TestExtends2.java TestSuper.java |
问题4:对象初始化顺序。
知识点解析:通过示例掌握对象的初始化顺序.
示例:示例1补充例3.3对象初始化顺序
问题5:abstract修饰的类与方法。
知识点解析:通过示例掌握abstract类和abstract方法.
示例:TestAbstract.java
问题6:final修饰。
知识点解析:通过示例掌握final类﹑final方法和final变量.
示例:TestFinal.java
问题7:接口与实现类。
知识点解析:通过示例掌握接口的用法和多重继承关系.
示例:补充例3.5接口
练习题(前三题至少选择一个完成)
1.声明三角形类Triangle,实现了图形接口Shape。该Shape接口声明了抽象方法doublearea() 和doubleperimeter(),编写测试类计算三角形的周长和面积。(考核点:接口)
2.已知:一个父类Telephone代表电话类,Telephone类中包含有电话品牌、电话号码、通 话时间、费率(即收费标准)等属性,以及计算话费和显示信息等方法。
要求:写一个子类Mobilephone代表移动电话,要求类Mobilephone具有如下性质:1)是电话类Telephone的子类;
2)除了具有Telephone类的属性外,它还有自己的属性:
网络类型network,String类型;
被叫时间receivedTime,double类型。
3)具有自己的方法:
publicdouble callCost() //计算话费
publicvoid display() //显示信息
4)包含一个main方法显示Telephone类和Mobilephone类的信息。(考核点:继承)
父类Telephone程序如下:
classTelephone{
String brand,number; doubledialledTime;
//定义属性:电话品牌,电话号码//定义属性:通话时间
doublerate; //定义属性:费率
public Telephone(String b,String n){
brand=b;
number=n;
}
publicvoid setBrand(String b){ brand=b;
}
publicvoid setNumber(String n){ number=n;
}
//设置电话品牌\电话号码\通话时间\费率
publicvoid setDialledTime(double d){
dialledTime=d;
}
publicvoid setRate(double r){
rate=r;
}
public String getBrand(){ returnbrand;
}
public String getNumber(){ returnnumber;
}
//返回电话品牌\电话号码\通话时间\费率
publicdouble getDialledTime(){
returndialledTime;
}
publicdouble getRate(){
returnrate;
}
publicdouble callCost(){ //计算返回通话费用returndialledTime*rate;
}
publicvoid display(){ //显示输出电话属性值
System.out.println("电话品牌:"+brand+" 电话号码:"+number); System.out.println("通话时间:"+dialledTime+" 费率:"+rate); System.out.println("话费:"+callCost());
}
}
3.请设计三个类:学生类Student,本科生类Undergraduate,研究生类Postgraduate;
其中:
1)Student 类是一个抽象类,它包含一些基本的学生信息:
String name; // 姓名
String type; // 学生类型
int[ ] courses; // 所学课程, 设为三门
String courseGrade; // 课程等级,根据三门课成绩求平均值得到的等级
2)Undergraduate 类和Postgraduate 类都是Student 类的子类,它们之间的主要差别
是计算课程等级的方法有所不同,研究生标准要比本科生的标准高一些。
本科生标准 60-70 一般 50-60 及格 |
研究生标准 70-80 一般 60-70 及格 |
3)假设有一个学生数组,里面既有本科生也有研究生,编写程序统计出全班学生的成
绩等级并显示出来。(考核点:抽象类及继承,数组)
4、运行程序,分析结果(考核点:对象的赋值相容性)classTree {}
classPine extendsTree {}
classOak extendsTree {}
publicclassForest {
publicstaticvoidmain(String[] args) { Treetree = newPine();
if(tree instanceofPine)
System.out.println("Pine");
if(tree instanceofTree)
System.out.println("Tree");
if(tree instanceofOak)
System.out.println("Oak");
else
System.out.println("Oops");
}
}
5、运行程序,分析结果(考核点:对象初始化顺序)
classArt {
Art(){
System.out.println("Artconstructor"); }
}
classDrawing extendsArt {
Drawing(){
super();
System.out.println("Drawingconstructor"); }
}
publicclassCartoon extendsDrawing {
Cartoon(){
super();
System.out.println("Cartoonconstructor"); }
publicstaticvoidmain(String[] args) {
Cartoonx = newCartoon();
}
}