zoukankan      html  css  js  c++  java
  • Java实验--继承与多态

    ---恢复内容开始---

    题目如下:

    [实验任务一]:面积计算(设计型)。
    1、 实验要求:
    实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分
    析等内容。
    2、实验内容:
    (1)设计一个形状类 Shape,包含一个 getArea()方法,该方法不包含实际语句。
    (2)在 Shape 类基础上设计圆形、矩形、三角形和梯形四个子类,要求根据实际形状重
    写 getArea()方法。
    (3)设计一个 TestShape 类,包含变量 area(存储总面积)、静态方法 countArea(Shape s),
    该方法负责把参数中的形状面积加入到 area 中。在 main 函数中新建(2)中四种类型的对象
    s1、s2、s3、s4,通过调用 countArea 方法把四个对象面积累加到 area 中,最后输出 area。
    [实验任务二]:抽象类和接口的设计(设计型)。
    1、 实验要求:
    (1)能实现抽象类的继承关系;
    (2)程序应包括各个被调用方法的执行结果的显示。
    (3)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
    并给出解决办法。(附运行界面、源代码)。
    2、 实验内容:
    (1) 定义抽象类 Shape,抽象方法为 showArea(),求出面积并显示,定义矩形


    类 Rectangle,正方形类 Square,圆类 Circle,根据各自的属性,用 showArea
    方法求出各自的面积,在 main 方法中构造 3 个对象,调用 showArea 方法。

    (2) 定义接口 DiagArea,其中包含方法 double getDiagonal()求对角线长, double
    getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和
    方法,定义一个正方形类继承矩形类(如矩形有长 w 和宽 h,正方形有边
    x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线
    长),在另一类中的主方法里使用测试该类。

    [实验任务三]:班级信息管理类设计(设计综合型实验)
    1、 实验要求:
    (1)能实现类的继承关系;
    (2)用多种方法创建各个类的对象;
    (3)程序应包括各个被调用方法的执行结果的显示。
    (4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
    并给出解决办法。(附运行界面、源代码)。
    2、 实验内容:
    (1)定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,
    以及设置和获取这些属性值的方法成员;
    (2)再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学
    号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程
    序,完成一个具有班级学生信息管理功能的程序。

    [实验任务四]:按照题目要求设计并编写一个 JAVA 程序(综合设计型)
    1、 实验要求:
    (1) 能实现类的继承关系;
    (2) 用多种方法创建各个类的对象;
    (3)程序应包括各个被调用方法的执行结果的显示。
    (4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,并
    给出解决办法。(附运行界面、源代码)。
    2、实验内容:学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学


    生的管理和对教师的管理在他们身上都有体现。
    (1)设计两个信息管理接口 StudentManageInterface 和 TeacherManageInterface。其中,
    StudentInterface 接口包括 setFee()方法和 getFee()方法,分别用于设置和获取学生的学费;
    TeacherInterface 接口包括 setPay()方法和 getPay()方法,分别用于设置和获取教师的工资
    (2)定义一个研究生类 Graduate,实现 StudentInterface 接口和 TeacherInterface 接口,它定
    义的成员变量有 name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
    创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足
    2000 元,则输出“provide a loan”(需要贷款)信息。
    (3)提示:
    ①定义两个接口,分别在其中申明两个方法。
    ②定义主类 Graduate,实现这两个接口。
    ③ 定义主类的成员变量,和构造方法。
    ④ 给出四个接口方法的实现。
    ⑤ 给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出
    是否需要贷款的信息。
    ⑥ 写 main 方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是
    否需要贷款的方法。

    下面是实验结果:

    设计思想:

        通过java之间对类的继承的了解,及其对接口和抽象类的定义,使用,来完成本节课的实验练习,并且通过练习掌握其中的技巧,熟练运用这些定义,来完成本节课的实验

    源程序:

    实验一:面积计算

    //MainTest.java

    package shape;
    //洪鼎淇 信1705-3 20173627
    public class MainTest {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Circle s1=new Circle(3);
            Triangle s2=new Triangle(3,3);
            Juxing s3=new Juxing(3,3);
            Tixing s4=new Tixing(2,3,4);
            System.out.println(TestShape.countArea(s1));
            System.out.println(TestShape.countArea(s2));
            System.out.println(TestShape.countArea(s3));
            System.out.println(TestShape.countArea(s4));
            
        }
    
    }

    //Shape.java

    package shape;
    
    public abstract class Shape {
        public abstract double getArea();
    }
    class Circle extends Shape
    {
        final double PI=3.1415926;
        private double x;
        public Circle(double bian)
        {
            x=bian;
        }
        public double getArea()
        {
            return x*x*PI;
        }
        
    }
    class Triangle extends Shape
    {
        private double width,height;
        public Triangle(double bian,double gao)
        {
            width=bian;
            height=gao;
        }
        public double getArea()
        {
            return width*height/2;
        }
    }
    class Juxing extends Shape
    {
        private double width,height;
        public Juxing(double bian,double gao)
        {
            width=bian;
            height=gao;
        }
        public double getArea()
        {
            return width*height;
        }
    }
    class Tixing extends Shape
    {
        private double width1,width2,height;
        public Tixing(double bian1,double bian2,double gao)
        {
            width1=bian1;
            width2=bian2;
            height=gao;
        }
        public double getArea()
        {
            return (width1+width2)*height/2;
        }
    }
    class TestShape
    {
        private static double area;
        TestShape()
        {
            area=0;
        }
        public static double countArea(Shape s)
        {
            area+=s.getArea();
            return area;
        }
    
    }

    实验二:抽象类和接口的设计

    第一小题:

    //DiagArea.java

    package diagArea;
    //洪鼎淇 信1705-3 20173627
    public interface DiagArea {
        double getDiagonal();
        double getArea();
    }
    class Rectangle implements DiagArea
    {
        double w,h;
        Rectangle(double bian,double gao)
        {
            w=bian;
            h=gao;
        }
        public double getDiagonal()
        {
            return Math.sqrt(Math.pow(w, 2)+Math.pow(h, 2));
        }
        public double getArea()
        {
            return h*w;
        }
    }
    class Square extends Rectangle
    {
        double x;
        Square(double a)
        {
            super(a,a);
        }
    }

    //TestDiag.java

    package diagArea;
    
    public class TestDiag {
        public static void main(String args[])
        {
            Rectangle s1=new Rectangle(3,4);
            Square s2=new Square(3);
            System.out.println("矩形的对角线长度为:"+s1.getDiagonal());
            System.out.println("矩形的面积为:"+s1.getArea());
            System.out.println("正方形的对角线长度为:"+s2.getDiagonal());
            System.out.println("正方形的面积为:"+s2.getArea());
        }
    }

    第二小题:

    //Shape.java

    package shape1;
    //信1705-3 洪鼎淇 20173627
    public abstract class Shape {
        public abstract void showArea();
    }
    class Rectangle extends Shape
    {
        double width,height;
        Rectangle(double bian,double gao)
        {
            width=bian;
            height=gao;
        }
        public void showArea()
        {
            System.out.println("该矩形的面积为:"+(width*height));
        }
    }
    class Square extends Shape
    {
        double width;
        Square(double bian)
        {
            width=bian;
        }
        public void showArea()
        {
            System.out.println("该正方形的面积为:"+(width*width));
        }
    }
    class Circle extends Shape
    {
        private final double PI=3.1415926;
        private double width;
        Circle(double bian)
        {
            width=bian;
        }
        public void showArea()
        {
            System.out.println("该圆形的面积为:"+(width*width*PI));
        }
    }

    //TestShape.java

    package shape1;
    
    public class TestShape {
    
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Rectangle s1=new Rectangle(3,4);
            s1.showArea();
            Square s2=new Square(3);
            s2.showArea();
            Circle s3=new Circle(3);
            s3.showArea();
        }
    
    }

    实验三:班级信息管理类

    //BanjiManager.java

    package banjiinfo;
    //洪鼎淇 信1705-3 20173627
    import java.util.Iterator;
    import java.util.Scanner;
    import java.util.Vector;
    
    
    
    public class BanjiManager {
        Vector<Student> map=new Vector<Student>();
        Iterator<Student> it;
        Scanner can;
        BanjiManager()
        {
            can=new Scanner(System.in);
        }
        public static void main(String args[])
        {
            BanjiManager a=new BanjiManager();
            a.run();
        }
        public void run()
        {
            int k=1;
            while(k<=5&&k>=1)
            {
                k=showmenu();
            }
            System.out.println("已退出系统");
            can.close();
        }
        public int showmenu()
        {
            System.out.println("大学生班级管理菜单");
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查看所有学生");
            System.out.println("5.查看学生信息");
            System.out.println("其他数字.退出循环");
            int num=can.nextInt();
            if(num==1)
            {
                tianjia();
            }
            else if(num==2)
            {
                shanchu();
            }
            else if(num==3)
            {
                xiugai();
            }
            else if(num==4)
            {
                show();
            }
            else if(num==5)
            {
                chaxun();
            }
            return num;
        }
        public void tianjia()
        {
            Student st=new Student();
            String x=null,n=null,s=null,s1=null;
            double s2=0;
            System.out.println("请输入要添加的学号");
            if(can.hasNext())
            {
                x=can.next();
            }
            if(canAdd(x))
            {
                System.out.println("请输入姓名,性别,籍贯和大学入学成绩");
                if(can.hasNext())
                {
                    n=can.next();
                }
                if(can.hasNext())
                {
                    s=can.next();
                }
                if(can.hasNext())
                {
                    s1=can.next();
                }
                if(can.hasNext())
                {
                    s2=can.nextInt();
                }
                st.setId(x);
                st.setName(n);
                st.setSex(s);
                st.setAddress(s1);
                st.setScore(s2);
                map.add(st);
            }
            else System.out.println("学号重复,请重新输入");
        }
        public void shanchu()
        {
            String x=null;
            System.out.println("请输入要删除的学号");
            if(can.hasNext())
            {
                x=can.next();
            }
            if(lookp(x)!=0)
            {
                map.removeElementAt(lookp(x)-1);
            }
            else System.out.println("查无此学号");
            
        }
        public void chaxun()
        {
            Student st=new Student();
            String x=null;
            System.out.println("请输入你想要查询的信息");
            if(can.hasNext())
            {
                x=can.next();
            }
            it=map.iterator();
            while(it.hasNext())
            {
                st=it.next();
                if(x.equals(st.getId()))
                {
                    System.out.println("该学生信息如下所示(学号,姓名,性别,籍贯,大学入学成绩)");
                    System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore());
                    return;
                }
            }
            System.out.println("没有找到要找到的信息");
            
        }
        public void show()
        {
            Student st=new Student();
            if(map.size()==0)
            {
                System.out.println("没有任何学生信息");
                return;
            }
                
            it=map.iterator();
            System.out.println("所有学生信息如下(学号,姓名,性别,籍贯,大学入学成绩):");
            while(it.hasNext())
            {
                st=it.next();
                System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore());
            }
        }
        public void xiugai()
        {
            Student st=new Student();
            String x=null,n=null,s=null,x1=null,s1=null;
            double s2=0;
            System.out.println("请输入要修改的学号");
            if(can.hasNext())
            {
                x=can.next();
            }
            if(!canAdd(x))
            {
                System.out.println("请输入要修改的学号,姓名,性别,籍贯和大学入学成绩");
                if(can.hasNext())
                {
                    n=can.next();
                }
                if(can.hasNext())
                {
                    s=can.next();
                }
                if(can.hasNext())
                {
                    s1=can.next();
                }
                if(can.hasNext())
                {
                    s2=can.nextInt();
                }
                
                if(canChange(x1,lookp(x)))
                {
                    st.setId(x);
                    st.setName(n);
                    st.setSex(s);
                    st.setAddress(s1);
                    st.setScore(s2);
                    map.setElementAt(st, lookp(x));
                }
                else System.out.println("学号重复,请重新输入");
                
            }
            else System.out.println("查无此学号");
        }
        //----------------------------------------------
        public int lookp(String xuehao)
        {
            Student st=new Student();
            int i=0;
            it=map.iterator();
            while(it.hasNext())
            {
                i++;
                st=it.next();
                if(st.getId().equals(xuehao))
                    break;
            }
            return i;
        }
        public boolean canChange(String xuehao,int n)
        {
            Student st=new Student();
            int i=0;
            it=map.iterator();
            boolean ok=true;
            while(it.hasNext())
            {
                i++;
                st=it.next();
                if(i==n)
                    continue;
                if(st.getId().equals(xuehao))
                {
                    ok=false;
                    break;
                }
            }
            return ok;
        }
        public boolean canAdd(String xuehao)
        {
            Student st=new Student();
            it=map.iterator();
            boolean ok=true;
            while(it.hasNext())
            {
                st=it.next();
                if(st.getId().equals(xuehao))
                {
                    ok=false;
                    break;
                }
            }
            return ok;
        }
    }

    //People.java

    package banjiinfo;
    
    public class People {
        String name,sex;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        
        
    }

    //Student.java

    package banjiinfo;
    
    public class Student extends People {
        String name,id,address;
        Student()
        {
            super();
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public double getScore() {
            return score;
        }
        public void setScore(double score) {
            this.score = score;
        }
        double score;
        
    }

    实验四:按照题目要求设计一个java程序

    //Graduate.java

    package graduate;
    //洪鼎淇 信1705-3 20173627
    public class Graduate implements StudentManagerInterface, TeacherManagerInterface {
        public static void main(String args[])
        {
            Graduate zhanshan=new Graduate();
            zhanshan.setFee(2200);
            zhanshan.setPay(3400);
            if(zhanshan.getPay()-zhanshan.getFee()<2000)
            {
                System.out.println("provide a loan");
            }
        }
    
        @Override
        public void setPay(double a) {
            // TODO 自动生成的方法存根
            pay=a;
        }
    
        @Override
        public double getPay() {
            // TODO 自动生成的方法存根
            return 0;
        }
    
        @Override
        public void setFee(double a) {
            // TODO 自动生成的方法存根
            fee=a;
        }
    
        @Override
        public double getFee() {
            // TODO 自动生成的方法存根
            return 0;
        }
        double fee=0;
        double pay=0;
    }

    //StudentManagerInterface.java

    package graduate;
    public interface StudentManagerInterface
    {
        
        void setFee(double a);
        double getFee();
    }

    //TeacherManagerInterface.java

    package graduate;
    
    public interface TeacherManagerInterface {
        
        void setPay(double a);
        double getPay();
    }

    实验结果截图:

    实验一:面积计算

    下面是实验的结果截图

    程序输入的信息如下所示

     

    实验二:抽象类与接口类的设计

    第一小题:

    第一小题输入的信息如下所示:

     

    第二小题:

     

    第二小题输入的信息如下所示:

     

    实验三:班级信息管理类设计
    实验的截图如下所示

     

    实验四:按照题目要求设计并编写一个Java程序

    按照题目于要求设计

     

    其中输入的数据如下所示:

     

     

    实验总结:

           通过本次课的练习,掌握了类之间继承的基本用法,并且还能够粗略领悟到在哪一方面能够使用到,例如同一方法的在不同类的相同定义,这里大概就是面对对象的思想的体现,总的来说这是一节学习到很多知识的实验课。并且,在抽象类和接口的设计上有了初步的认识,了解到了其中的语法,这在我之前的java学习中尚且没有学习过,领悟颇深的一次实验。

    ---恢复内容结束---

  • 相关阅读:
    批量处理进程
    稳定寻找app package和activity的办法
    python yield
    记一次 Appium socket hang up 问题 以及小米手机关闭对uiautomator2.server的省电策略
    MySQL数据库连接不上、密码修改问题
    二、观察者模式(Observer Pattern)《HeadFirst设计模式》读书笔记
    一、策略模式(Strategy Pattern)《HeadFirst设计模式》读书笔记
    Java Scanner类中next()和nextLine()方法的区别
    Mybatis 9、Lombok
    Mybatis 8、使用注解开发
  • 原文地址:https://www.cnblogs.com/halone/p/9943965.html
Copyright © 2011-2022 走看看