修饰符与继承性

一、实验目的:

了解如何使用类及其成员的修饰符,理解类的继承性,掌握方法的继承、重载和覆盖。

二、实验环境:

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 voidsetX(int newX) {
        x = newX;
    }
    public int getY() {
        return y;
    }
    public void setY(intnewY) {
        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,看看该程序是否有错?如果有错请在实验报告中指出出错的地方,出错的原因,并给出修改意见以及程序正确运行的结果。

答:有错。错误:Cannotmake a static reference to the non-static method getY() from the typeStaticDemo。原因:getY()方法不是Static方法,必须要通过对象才能调用。

修改:程序代码:

class StaticDemo {

       staticint x;

       inty;

       publicstatic int getX() {

              returnx;

       }

       publicstatic void setX(int newX) {

              x= newX;

       }

       publicint getY() {

              returny;

       }

       publicvoid setY(int newY) {

              y= newY;

       }

}

public class ky4_1 {

       publicstatic void main(String[] args) {

              //TODO Auto-generated method stub

              System.out.println("类变量x="+StaticDemo.getX());

              StaticDemoStaticDemo=new StaticDemo();

              System.out.println("对象变量y="+StaticDemo.getY()); 

              StaticDemoa= new StaticDemo();

              StaticDemob= 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=2

类变量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, inty){

              return x*x+y*y;

       }

       public static voidmain(String[] args) {

              // TODOAuto-generated method stub

              int a=4;

              int b=5;

              KY4_2 jisuan=newKY4_2();

              System.out.println(jisuan.square(a,b));

       }

}

运行结果:41

  

(三)类的继承性练习

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要在同一文件夹(路径)内。

//KY4_4

//源程序

public class KY4_4 extends KY4_3{

    String xy;          //学院

    String xi;          //系

    public void print(){

        System.out.println(xm+","+xh+", "+xy+", "+xi);

    }

    public static voidmain(String[] args) {

        // TODOAuto-generated method stub

        KY4_3 f=newKY4_3();

        f.xm="帅零";

        f.xh=12321;

        f.print();

        KY4_4 s=newKY4_4();

        s.xm="郭娜";

        s.xh=12345;

        s.xy="经济管理学院";

        s.xi="信息管理系";

        s.print();

    }

}

运行结果:

帅零, 12321

郭娜, 12345, 经济管理学院, 信息管理系

四、思考题

1.    说明类的继承和多态都有什么作用?

 

答:继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。
多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。

 

 

四、心得体会:

了解了如何使用类及其成员的修饰符,有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符有:public,private,protected,package,static,final,abstract等。

理解了类的继承性,掌握方法的继承、重载和覆盖。新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。

    当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。

Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。

 

全部评论

相关推荐

昨天 13:52
门头沟学院 后端
给🐭🐭个面试机会吧:嘿,mvbatis
点赞 评论 收藏
分享
2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务