实验三 类的继承与接口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三类的继承与接口
实验目的:
1、熟练掌握Java语言面向对象的继承机制(extends关键字)
2、在继承机制模式下熟练理解抽象类、抽象方法(abstract关键字)
3、在继承机制模式下进一步深入掌握final、this、super的使用
4、熟练掌握类的特殊形式-接口(interface)
5、熟练掌握接口的实现(implements)、接口的继承(extends)
6、熟练掌握Java语言中的内部类机制,重点掌握匿名内部类实现机制
实验内容:
一、类的继承
题目一:填空,完成并运行程序。
写下程序运行结果并回答问题。
理解创建新类B(通过继承现有类A)的方法,使新类B具有类A的功能,并添加新的功能,编写主类考查通过继承创建的类B与父类A
程序一:
class A{
int i,j;
void showij(){System.out.println("i and j:"+i+" "+j);}
}
class B{ //B类继承A类的属性和方法
int k;
void showk(){System.out.println("k:"+k);}
void sum(){System.out.println("i+j+k:"+(i+j+k));}
}
public class M1{
public static void main(String args[]){
A father =new A();
B son=new B();
father.i=10;father.j=20;
//使用父类A中的方法
son.i=7;son.j=8;son.k=9;
//使用子类B从父类A中继承的方法
//使用子类B新增的方法showk()
son.sum();
}
}
思考题:
1、将父类A中的成员变量i声明为private,编译时观察有哪几处错误?
2、在程序一中的子类B中添加语句:int i,j;(对父类A中的同名变量i,j 进行了重新定义)观察运行结果有什么不同?为什么?这种现象称为什么?
3、在程序一中在子类B中添加成员方法:
void showij(){System.out.println (“覆盖了父类的成员方法”);}
(对父类A中的同名方法进行重新定义)观察运行结果有什么不同?为什么?这种现象称为什么?
二、类的多态性
目的:将功能相近的方法用同一名字表示。
如何区分:用参数表的个数、类型和顺序来区分相同名字而功能不同的方法。
题目二:完成程序二中主类中的主方法,内容包括:
(1)用类Intsort创建对象s
(2)显示输出两个数的排序10,25
(3)显示输出三个数的排序10,25 ,17
程序二:
class Intsort{
public String sort(int a,int b){ //定义两个数排序的方法if(a>b)return a+” ”+b;
else return b+” ”+a;
}
public String sort(int a,int b,int c){ //定义三个数排序的方法
int swap;
if(a<b){swap=a;a=b;b=swap;}
if(a<c){swap=a;a=c;c=swap;}
if(b<c){swap=b;b=c;c=swap;}
return a+” ”+b+” ”+c;
}
}
public class M1{ //定义主类考查Intsort类中的方法
public static void main(String args[]){
}
}
三、改造程序
程序三:
import java.awt.*;
import java.applet.Applet;
public class UseCar extends Applet{
public void paint(Graphics g){
Car mycar=new Car();
g.drawString("起始位置"+mycar.getwz(),10,20);
g.drawString("前进100",10,35);
mycar.qj(100);
g.drawString("后退30",10,50);
mycar.ht(30);
g.drawString("当前位置"+mycar.getwz(),10,65);
}
}
class Car{
private int wz;
public Car(){wz=0;}
public void qj(int wz1){wz+=wz1;}
public void ht(int wz1){wz-=wz1;}
public int getwz(){return wz;}
}
题目三:参考程序三,用画图来表示车的位置(运行结果见下页)
1)添加一个用于画出小车的类Hcar,属性:位置、设置位置的方法、画出小车的方法
2)在主类中调用Hcar类画出小车在改
变位置时不同的位置。
import java.awt.*;
import java.applet.Applet;
public class Car2 extends Applet{
public void paint(Graphics g){
Car mycar=new Car();
//用Hcar类创建对象hcar
g.drawString("起始位置
"+mycar.getwz(),10,20); //小车起始位置
hcar.setwz(mycar.x); //设置画小车位置
hcar.draw(g); //在该位置画出小车
g.drawString("前进300",10,35);
//小车前进300,位置发生变化
//设置画小车位置
//在该位置画出小车
g.drawString("后退100",10,50);
//小车后退100,位置发生变化
//设置画小车位置
//在该位置画出小车
g.drawString("当前位置:"+mycar.getwz(),10,65);
}
}
class Car{
public int x;
public Car(){x=0;}
public void qj(int wz1){x+=wz1;}
public void ht(int wz1){x-=wz1;}
public int getwz(){return x;}
}
class Hcar{ //定义画出小车的类
int xpos=20;
public void setwz(int xx){xpos=xx;}
public void draw(Graphics g){
g.drawRect(xpos,90,30,12);
g.drawOval(xpos+5,90+12,6,6);
g.drawOval(xpos+20,90+12,6,6);
g.drawString("位置:"+xpos,xpos,90+40);
}
}
四、编写程序
题目三:
编写程序,具体要求为:
(1)定义一个计算面积的类Area(可以计算正方形、矩形或梯形的面积):
其中包括三个同名的成员方法(用于计算正方形、矩形或梯形的面积,返回值类型为float,参数分别为1个、2个或3个)。
(2)创建主类:
利用Area类分别输出正方形(边长为2.0f)、矩形(长为5.0f,宽为4.0f)和梯形(上底为2.0f,上底为3.0f,高为4.0f)的面积。
题目四:编写Application程序,模拟银行存取款业务。
1、建银行帐户类bank,
添加变量:储户现有款项account(int型)
添加方法:
●存款的方法income:带有一个参数,用来表示存入的钱数(int型),无返回值。
●取款的方法takeout:带有一个参数,用来表示取出的钱数(int型),无返回值。
●显示余额的方法show:无参数,无返回值。
2、建立主类C1(要求是Applet程序),创建对象(模拟储户名zhang3),存款1000,取款500,显示余额。
小结:
掌握类的继承性与多态性表现的方面,以及具体在程序设计中的实现。