一、实验目的:
1.编写如何使用类及其成员的修饰符的程序。
2.编写如何通过传递参数来调用方法的程序。
3.编写体现类的继承性(成员变量、成员方法的继承)的程序。
二、实验环境:
Eclipse
三、实验内容:
(一) 声明不同数据类型的变量
(一)使用修饰符
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符有:public,private,protected,package,static,final,abstract等。
1. 程序功能:通过两个类 StaticDemo、KY4_1 来说明类变量与对象变量,以及类方法与对象方法的区别。
对象变量 :类声明的变量被称作对象变量,简称对象。
2. 编写源程序 KY4_1.java,程序源代码如下。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class KY4_1 {
public static void main(String[] args) {
System.out.println("类变量x="+StaticDemo.getX());
System.out.println("对象变量y="+StaticDemo.getY());
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("类变量a.x="+a.getX());
System.out.println("对象变量a.y="+a.getY());
System.out.println("类变量b.x="+b.getX());
System.out.println("对象变量b.y="+b.getY());
}
}
3. 编译并运行程序 KY4_1.java,看看该程序是否有错?如果有错请在实验报告中指出出错的地方,出错的原因,并给出修改意见以及程序正确运行的结果。
答:有错。定义对象变量时(int y;)没有static,无此则指定变量,诶有被所有的对象共享,即所有实例时无法使用该变量的。public int getY()这一句中也缺少了static,使得下面System.out.println("对象变量y="+StaticDemo.getY());这句使用时就报错了。
class StaticDemo{
static int x;
static int y;
public static int getX(){
return x;
}
public static void setX(int newX){
x=newX;
}
public static int getY(){
return y;
}
public static void setY(int newY){
y=newY;
}
}
public class KY4_1 {
public static void main(String[] args) {
System.out.println("类变量x="+StaticDemo.getX());
System.out.println("对象变量y="+StaticDemo.getY());
StaticDemo a=new StaticDemo();
StaticDemo b=new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
b.setY(4);
System.out.println("类变量a.x="+a.getX());
System.out.println("对象变量a.y="+a.getY());
System.out.println("类变量b.x="+b.getX());
System.out.println("对象变量b.y="+b.getY());
}
}
结果如下:类变量x=0
对象变量y=0
类变量a.x=3
对象变量a.y=4
类变量b.x=3
对象变量b.y=4
(二)方法中参数传递的练习
1. 编写一个程序文件KY4_2.java。
2. 程序功能如下:有一个主方法main() 以及一个求平方和的方法int square(int x, int y)。square方法计算参数x 和y的平方和,并返回该平方和值。在主方法main中定义两个整型变量,并给它们赋一个初值,然后使用这两个变量作为实际参数来调用square方法,求出平方和,最后输出平方和。
3. 请将程序KY4_2.java的源代码写在实验报告中。
答:public class KY4_2 {
int square(int x,int y){
return (x*x+y*y);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
KY4_2 s=new KY4_2();
int a=3;
int b=5;
int result=s.square(a,b);
System.out.println("平方和为:"+result);
}
}
结果如下:平方和为:34
(三)类的继承性练习
1. 进一步理解继承的含义
新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类 还可添加新的变量和方法。这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。
Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。
2.编写两个程序文件KY4_3.java和KY4_4.java,实现类的继承。
3.KY4_3.java的代码如下:
public class KY4_3
{
protected String xm; //姓名
protected int xh; //学号
void setdata(String m,int h) //该方法为姓名和学号赋初始值
{
xm =m;
xh = h;
}
public void print() //输出学生的姓名和学号
{
System.out.println(xm+", "+xh);
}
}
4.编译 KY4_3.java,产生类文件 KY4_3.class。注意:暂时不运行程序KY4_3.class。
5.编写一个程序文件KY4_4.java。程序功能如下:子类KY4_4继承父类 KY4_3,其不仅具有父类的成员变量 xm(姓名)、xh(学号),还定义了新的成员变量 xy(学院)、xi(系)。在子类KY4_4中重写了父类的方法print(),在该方法中不仅输出学生的姓名和学号,而且还输出学生的学院和系。 另外,在子类KY4_4中还定义了一个主方法main。首先,在主方法中创建一个父类 KY4_3的对象f,设置f的姓名为"帅零",学号为"12321",并且调用print()方法输出对象f的姓名和学号。接着,在主方法中创建一个子类 KY4_4的对象s,设置s的姓名为"郭娜",学号为"12345",学院为"经济管理学院",系为"信息管理系",并且调用print()方法输出对象s的姓名,学号,学院和系。
6.编译并运行程序KY4_4.java。请将KY4_4的源程序以及运行结果写在实验报告中。
注意:父类 KY4_3 与子类 KY4_4要在同一文件夹(路径)内。
答:public class KY4_3
{
protected String xm; //姓名
protected int xh; //学号
void setdata(String m,int h) //该方法为姓名和学号赋初始值
{
xm =m;
xh = h;
}
public void print() //输出学生的姓名和学号
{
System.out.println(xm+", "+xh);
}
}
public class KY4_4 extends KY4_3 {
protected String xy;
protected String xi;
public static void main(String[] args) {
KY4_3 f=new KY4_3();
f.setdata("帅零",12321);
f.print();
KY4_4 s=new KY4_4();
s.setdata("郭丽娜",12345);// 调用父类的成员方法
s.xy="经济管理学院";//访问本类成员变量
s.xi="信息管理系";//访问本类的成员变量
s.print();
System.out.print(s.xm+","+s.xy+","+s.xi);
}
}
运行结果如下:
(四)、思考题
1. 说明类的继承和多态都有什么作用?
答:
继承是软件复用的一种形式,实现这种形式的方法是从现有的类建立新类,新类继承了现有类的方法和属性,同时新类又可以定义自己的方法和属性。软件复用缩自短了开发时间。继承的魅力在于能够添加基类没有的特点从而对基类进行改进。多态是比较高级的特性,另一个高级特性是模板,这两个在构造复杂系统时才用得上,如MFC类库中大量运用了多态特性,而ATL将模板运用得淋漓尽致。