创建CollegeStudent类继承Student类并编程

在前面创建Student类的基础上,派生一个CollegeStudent类并用之编程

创建Student 类的要求见https://blog.csdn.net/m0_37160376/article/details/80329662
CollegeStudent 类在学生类上增加一个专业(profession)数据属性;方法上增加获得专业和设置专业两个方法。并对超类中的toString( )方法进行重写,使得CollegeStudent类中的toString( )方法除了显示学生类的信息外,还要显示它的专业属性。
编写测试程序的主类。在主类中创建一个Student对象和CollegeStudent对象,并显示或修改这两个对象的属性值。

import java.util.Scanner;

class Student {

    private static int count;/*** 班级号*/
    private String classNo;
    /**
     * 年龄
     */
    private int age;
    /**
     * 性别
     */
    private char sex;
    /**
     * 姓名
     */
    private String name;
    /**
     * 学号
     */
    private String stuNo;

    public Student(String stuNo, String classNo, String name, char sex, int age) {
        super();
        this.age = age;
        this.classNo = classNo;
        this.name = name;
        this.sex = sex;
        this.stuNo = stuNo;
        count++;
    }

    public static int getExsitingStudentCount() {
        return count;
    }

    public String getClassNo() {
        return classNo;
    }

    public void setClassNo(String classNo) {
        this.classNo = classNo;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    /**
     *
     * @return F为男,M为女
     */
    public String getSexString() {
        return sex == 'F' ? "男" : "女";
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public String getStuNo() {
        return stuNo;
    }

    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }

    public String prop(String name, Object value, char sep) {
        return sep + name + ":" + value;
    }

    public String toString() {
        String desc = prop("学号", stuNo, '\0');
        desc += prop("班号", classNo, ',');
        desc += prop("姓名", name, ',');
        desc += prop("性别", getSexString(), ',');
        desc += prop("年龄", age, ',');
        return desc;
    }
}
class CollegeStudent extends Student{
    private String profession;
    public CollegeStudent(String stuNo, String classNo, String name, char sex, int age,String profession){
        super(stuNo, classNo, name,sex, age);
        this.profession = profession;
    }

    public String getProfession() {
        return profession;
    }

    public void setProfession(String profession) {
        this.profession = profession;
    }

    @Override
    public String toString() {
        String desc = prop("专业",profession,',');
        return super.toString()+ desc;
    }
}
public class e2_4 {
    public static void main(String[] args) {
        Student s1 = new Student("11111", "1", "Tom", 'F', 20);
        Student s2 = new Student("22222", "1", "Mary", 'M', 20);
        Student s3 = new CollegeStudent("33333", "1", "Tm", 'F', 10,"电光");
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        Scanner s = new Scanner(System.in);
        System.out.println("修改第一位学生的姓名与年龄(回车结束修改):");
        String str1 = s.next();
        int a = s.nextInt();
        s1.setName(str1);
        s1.setAge(a);
        System.out.println("修改完成!");
        System.out.println("修改第二位学生的姓名与年龄(回车结束修改):");
        String str2 = s.next();
        int b = s.nextInt();
        s2.setName(str2);
        s2.setAge(b);
        System.out.println("修改完成!");

        printlnSeparator();


        System.out.println("修改后信息:");
        println("姓名", s1.getName());
        println("年龄", s1.getAge());
        println("姓名", s2.getName());
        println("年龄", s2.getAge());

        printlnSeparator();

        System.out.println("年龄较大的是:");

        if (s1.getAge() > s2.getAge()) {
            System.out.println(s1);
        } else
            System.out.println(s2);
    }
    private static void printlnSeparator(){
        System.out.println("=============================");
    }

    public static void println(String prop, Object value) {
        System.out.println(prop + ":" + value);
    }
}
/*00 i love zhangyan 00*/

我自己出现的错误有几个:
1.在创建Student的子类CollegeStudent类的时候,会报错There is no default constructor available…的错误,这是因为CollegeStudent类的构造器要做的第一件事是调用Student类的无参构造器,但是Student类没有, 当我写到CollegeStudent类中的CollegeStudent构造函数时

public CollegeStudent(String stuNo, String classNo, String name, char sex, int age,String profession){
        super(stuNo, classNo, name,sex, age);
        this.profession = profession;
    }

super(stuNo, classNo, name,sex, age); 调用了父类的多参数构造器。
2.重写CollegeStudent类中的toString方法时,我直接return desc,然后运行程序时只能返回一个专业,修改后应该是return super.toString()+ desc;

子类从自己的构造器调用其父类的构造器是有实际意义的,因为子类的实例必须始终伴有其每个父类的实例。因此,对子类中没有覆盖的方法的调用将被传递到其父类,一直传递到层次结构的第一层为止

猜你喜欢

转载自blog.csdn.net/m0_37160376/article/details/80341565