Java作业二 面向对象程序设计

掌握类、对象、方法、继承、接口的编程技术

一、编写一个含有5个类的程序

  1. Person类

    属性:编号、姓名、性别;

    构造方法:确定编号和姓名;

    一般方法:修改编号、姓名,获取编号、姓名。

  2. Teacher类

    继承Person类并增加:

    属性:系别;

    构造方法:调用父类的构造方法;

    一般方法:修改、获取系别。

  3. Student类

    继承类Person并增加:

    属性:班级;

    构造方法:调用父类的构造方法;

    一般方法:修改、获取班级属性值。

  4. Klass类:

    属性:班级名称,学生名单(Student类对象的数组);

    构造方法:确定班级名称;

    一般方法:建立学生名单,输出学生名单。

  5. Main类:

    主类。主方法中创建一个班级,然后建立该班级的学生名单,最后输出学生名单。

代码实现

import java.util.Scanner;

public class Main
{
    public static class Person
    {
        private String number;
        private String name;
        private String gender;
        public Person(String number,String name)
        {
            this.number = number;
            this.name = name;
        }
        public void setNumber(String number)
        {
            this.number = number;
        }

        public void setName(String name)
        {
            this.name = name;
        }

        public String getNumber()
        {
            return number;
        }

        public String getName()
        {
            return name;
        }
    }

    public static class Teacher extends Person
    {
        private String department;
        public Teacher(String number, String name)
        {
            super(number, name);
        }

        public void setDepartment(String department)
        {
            this.department = department;
        }

        public String getDepartment()
        {
            return department;
        }
    }

    public static class Student extends Person
    {
        private  String grade;

        public Student(String number, String name)
        {
            super(number, name);
        }

        public void setGrade(String grade)
        {
            this.grade = grade;
        }

        public String getGrade()
        {
            return grade;
        }
    }

    public static class Classes
    {
        private String className;

        private Student stuList[] = new Student[100];
        public Classes(String className)
        {
            this.className = className;
        }

        public void setStuList(int i,Student student)
        {
            stuList[i] = student;
        }

        public void getStuList(int n)
        {
            for (int i = 0; i < n; i++)
            {
                System.out.println(stuList[i].getName());
            }
        }
    }

    public static void main(String args[])
    {
        System.out.println("请输入班级名称:");
        Scanner scanner = new Scanner(System.in);

        if (scanner.hasNext())
        {
            String classname = scanner.next();
            Classes class1 = new Classes(classname);
            System.out.println("请输入班级人数:");
            int sum = Integer.parseInt(scanner.next());
            System.out.println("请分别输入每位学生的编号和姓名:");
            for (int i = 0; i < sum; i++)
            {
                String number = scanner.next();
                String name = scanner.next();
                Student student = new Student(number,name);
                class1.setStuList(i,student);
            }
            System.out.println("该班级的学生名单如下:");
            class1.getStuList(sum);
        }
    }
}

运行截图

二、阅读程序题1

请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(重点理解:抽象类、抽象方法、(匿名)内部类、匿名对象)

abstract class A{abstract String getS();}

class Test
{ 
    public static void main(String args[])
    {
        System.out.println(new A(){ String getS(){ return "抽象?匿名?";}}.getS());

    }
}

分析:

定义了一个抽象类A,然后在主类的主方法中使用了它。

一般来说用到抽象类的时候,要先定义一个子类来继承它,并且实现它所有的抽象方法。抽象类中所有方法都是抽象的,没有方法体。也就是说抽象类的所有方法在子类中都要实现,不然子类仍是抽象的。

这里用到的是匿名内部类,省去了写子类继承抽象类—创建对象—用对象调用子类的方法这一过程。格式是这样new 抽象类名或接口名(){覆盖重写所有抽象方法}

匿名类不取名字,直接用父类的名字或接口的名字(接口跟抽象类相似)。使用new同时完成了类的定义和对象的创建。完成类的定义是指相当于声明了一个新的类来继承抽象类,所以必须在匿名类实现所有抽象方法,我们可以看到它实现了抽象类的方法String getS(){ return "抽象?匿名?";}。完成对象的创建是指我们new完之后可以直接将子类当成对象来用,子类中它直接用.来访问自己的方法.getS(),同时注意到new的时候在父类的名字后有一对(),这相当于调用构造对象时的构造方法,形参列表一般为空。

结果:

显然是输出抽象?匿名?这一字符串了。

三、阅读程序题2

请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。

(重点理解:接口、接口实现方法、(匿名)内部类、匿名对象)

interface I{ String getS(); }

class Test
{
    public static void main(String args[]){
    System.out.println(new I(){ public String getS(){ return "接口和内部类!";}}.getS());}
}

这题跟上题相似,只不过把抽象类变成了接口。接口的抽象程度比抽象类更高。

不同就在于抽象类中的方法在子类中必须全部实现,接口中的方法可以不必全部实现,可以只实现那些用得到的方法。

输出结果也是字符串啦。

posted @ 2022-01-08 16:07  繁辰一梦  阅读(54)  评论(0编辑  收藏  举报