注:以下三个类代码通过了阿里巴巴Java规范插件验证。
1、Student类
/**
 * 牛客网第三题——学生类
 */
package com.finersoft.nowcoder;

/**
 * 名称:学生类 说明:
 * 
 * @author Finersoft
 * @date 2018年3月1日
 */
public class Student {
    /** 定义最长寿命为200岁 */
    public final int MAXAGE= 200;

    /** * 姓名 */
    private String name;
    /** * 年龄 */
    private int age;

    /** * @return the name */
    public String getName() {
        return name;
    }

    /** * @param name * the name to set to a student */
    public void setName(String name) {
        if (name != null && name != "") {
            this.name = name;
        } else {
            System.out.println("姓名不能为空");
        }
    }

    /** * @return the age */
    public int getAge() {
        return age;
    }

    /** * @param age the age to set to a student */
    public void setAge(int age) {
        if (age >= 0 && age <= MAXAGE) {
            this.age = age;
        } else {
            System.out.println("请输入一个正常现代人的年龄");
        }
    }

    /**
     * 默认构造函数
     */
    public Student() {
        this("张三", 18);
    }

    /**
     * 带一参数的构造函数
     * 
     * @param name
     *            学生姓名
     */
    public Student(String name) {
        this(name, 18);
    }

    /**
     * 完整参数构造函数
     * 
     * @param name
     *            学生姓名
     * @param age
     *            学生年龄
     */
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 打印学生信息
     */
    public void show() {
        System.out.println(this.toString());
    }

    /**
     * 转换成字符串操作
     */
    @Override
    public String toString() {
        return "学生信息:\r\n\t姓名:" + this.getName ()+ "\r\n\t年龄:" + this.getAge();

    }
    
    public static void main(String[] args) {
        //无参构造函数
        Student stu1= new Student();
        stu1.show();
        //一参构造函数
        stu1=new Student("牛牛");
        stu1.show();
        //两参构造函数
        stu1=new Student("牛牛",16);
        stu1.show();
        //修改年龄和姓名
        stu1.setAge(20);
        stu1.setName("牛可");
        stu1.show();
        
        //不能输入错误的年龄
        stu1.setAge(-20);
        stu1.show();
        
        //不能输入错误的姓名
        stu1.setName("");
        stu1.show();
    }

}
2、Undergraduate类
/**
 * 牛客网第三题——研究生类
 */
package com.finersoft.nowcoder;

/**
 * 名称:研究生 说明:
 * 
 * @author Finersoft
 * @date 2018年3月1日
 */
public class Undergraduate extends Student {
    /** 学位 */
    private String degree;

    /** * @return 学位信息 */
    public String getDegree() {
        return degree;
    }

    /** * @param degree 学位信息 */
    public void setDegree(String degree) {
        if (degree != null && degree != "") {
            this.degree = degree;
        } else {
            System.out.println("学位不能为空");
        }
    }

    /**
     * 无参构造
     */
    public Undergraduate() {
        this("李四", 22, "Java开发");
    }

    /**
     * 单参构造
     * 
     * @param name
     *            研究生姓名
     */
    public Undergraduate(String name) {
        this(name, 22, "Java开发");
    }

    /**
     * 双参构造
     * 
     * @param name
     *            研究生姓名
     * @param age
     *            研究生年龄
     */
    public Undergraduate(String name, int age) {
        this(name, age, "Java开发");
    }

    /**
     * 完整参数构造
     * 
     * @param name
     *            研究生姓名
     * @param age
     *            研究生年龄
     * @param degree
     *            学位信息
     */
    public Undergraduate(String name, int age, String degree) {
        super(name, age);
        this.degree = degree;
    }

    /**
     * 转换成字符串操作
     * 
     * @see com.finersoft.nowcoder.Student#toString()
     */
    @Override
    public String toString() {
        return "研究生"+ super.toString() + "\r\n\t学位:" + this.getDegree();
    }

    /**
     * 打印研究生信息
     * 
     * @see com.finersoft.nowcoder.Student#show()
     */
    @Override
    public void show() {
        System.out.println(this.toString());
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 无参构造函数
        Undergraduate stu1 = new Undergraduate();
        stu1.show();
        // 一参构造函数
        stu1 = new Undergraduate("牛牛");
        stu1.show();
        // 两参构造函数
        stu1 = new Undergraduate("牛牛", 23);
        stu1.show();
        // 完整参数构造函数
        stu1 = new Undergraduate("牛客", 24, "Java架构");
        stu1.show();
        // 修改学位信息
        stu1.setDegree("JavaEE");
        stu1.show();
        // 修改学位信息——报错,学位不能为空
        stu1.setDegree("");
        stu1.show();
    }

}
3、 TestStudent类
/**
 * 牛客网第三题——测试类
 */
package com.finersoft.nowcoder;

/**
 * 名称:测试学生类
 * 说明:
 * @author Finersoft
 * @date 2018年3月1日
 */
public class TestStudent {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Student stu = new Student("牛珂",18);
        stu.setAge(20);
        stu.setName("牛可可");
        stu.show();
        
        Undergraduate stu2= new Undergraduate(stu.getName(),stu.getAge(),"Java虚拟机");
        stu2.show();

    }

}