Java类的继承、抽象类的使用

假定根据学生的3门学位课程的分数决定其是否可以毕业,对于本科生,如果3门课程的平均分数超过60分即能毕业,而对于研究生,则需要平均分超过80分并且论文合格才能毕业。
通过子类和继承来实现
1)设计一个Student描述学生的共同特征和行为(学号,三门课程成绩;设置成绩,计算平均成绩)。
2)设计一个描述本科生的类ndergraduate,该类继承并扩展Student类(增加方法:判断是否毕业).
3)设计一个描述研究生的类Graduate,该类继承并扩展Student类。(增加属性:论文是否合格;增加方法:判断是否毕业)。
4)设计一个测试类StudentDemo,分别创建本科生和研究生这两个类的对象,并输出相关信息

Student类

package my_homework;

public class Student {
    public String name;
    public double score[];

    Student() {
        ;
    }

    Student(String name, double s1, double s2, double s3) {
        this.name = name;
        score = new double[3];
        score[0] = s1;
        score[1] = s2;
        score[2] = s3;
    }

    Student(String name) {
        this.name = name;
    }

    public double[] getScore() {
        return score;
    }

    public String getName() {
        return name;
    }

    public void set_scores(double s1, double s2, double s3) {
        score[0] = s1;
        score[1] = s2;
        score[2] = s3;
    }
    public double get_ave(){
        return (score[0]+score[1]+score[2])/3.0;
    }
}

Undergraduate类

package my_homework;

public class Undergraduate extends Student{
    Undergraduate(String name, double s1, double s2, double s3){
        super(name, s1, s2, s3);
    }

    public boolean is_graduate(){
        if(get_ave()>60) return true;
        return false;
    }
}

Graduate类

package my_homework;

public class Graduate extends Student{
    public boolean is_hege;
    Graduate(String name, double s1, double s2, double s3,double lunwen){
        super(name, s1, s2, s3);
        if(lunwen>80) is_hege=true;
        else is_hege=false;
    }

    public boolean is_graduate(){
        return is_hege&&(get_ave()>60);
    }

    public void setIs_hege(boolean is_hege) {
        this.is_hege = is_hege;
    }

    public boolean getIs_hege(){
        return is_hege;
    }
}

StudentDemo类

package my_homework;

public class StudentDemo {
    public static void main(String args[]) {
        //本科生
        Undergraduate undergraduate = new Undergraduate("XiaoMing", 91.5, 88.0, 99.5);
        System.out.println("该本科生姓名:" + undergraduate.getName());
        double t[]=undergraduate.getScore();
        System.out.print("      成绩:");
        for(int i=0;i<3;i++){
            System.out.print(t[i]+",");
        }
        System.out.println();
        System.out.println("      平均分为:"+undergraduate.get_ave());
        System.out.println("该本科生成绩有误,修正第二门成绩为90.0,重新设置成绩");
        undergraduate.set_scores(91.5,90.0,99.5);
        System.out.println("该本科生姓名:" + undergraduate.getName());
        t=undergraduate.getScore();
        System.out.print("      成绩:");
        for(int i=0;i<3;i++){
            System.out.print(t[i]+",");
        }
        System.out.println();
        System.out.println("      平均分为:"+undergraduate.get_ave());
        if(undergraduate.is_graduate()) System.out.println("该本科生可以毕业");
        else System.out.println("该本科生不可以毕业");
        System.out.println("================================");
        //研究生
        Graduate graduate = new Graduate("WangRuo", 66.5, 45.5, 60.0,96);
        System.out.println("该研究生姓名:"+graduate.getName());
        System.out.print("      成绩:");
        t=graduate.getScore();
        for(int i=0;i<3;i++){
            System.out.print(t[i]+",");
        }
        System.out.println();
        System.out.println("该研究生平均分为:"+graduate.get_ave());
        if(graduate.getIs_hege()) System.out.println("该研究生论文成绩合格");
        else System.out.println("该研究生论文成绩不合格");
        if(graduate.is_graduate()) System.out.println("该研究生可以毕业");
        else System.out.println("该研究生不可以毕业");
    }
}

在前面的基础上
1)为Student类增加方法,判断学生是否毕业
2)在Undergraduate和Graduate类中,分别重写该方法

在Student类中加上:

    public boolean is_graduate(){
        if(get_ave()>60) return true;
        else return false;
    }

即可
(Undergraduate和Graduate类中原本用的判断毕业函数就是这个)
(这时子类不能直接调用父类中的判断毕业函数,因为已经重写,但是在子类中可以通过super调用父类中的方法或者变量)

在前面的基础上修改:
1)定义Student类为abstract类,有抽象的方法isGraduate
2)Student的两个子类Undergraduate,Graduate重写抽象的方法
3)通过上转型对象调用子类重写的方法

Student类变为:

package my_homework;

abstract class Student {
    public String name;
    public double score[];

    Student() {
        ;
    }

    Student(String name, double s1, double s2, double s3) {
        this.name = name;
        score = new double[3];
        score[0] = s1;
        score[1] = s2;
        score[2] = s3;
    }

    Student(String name) {
        this.name = name;
    }

    public double[] getScore() {
        return score;
    }

    public String getName() {
        return name;
    }

    public void set_scores(double s1, double s2, double s3) {
        score[0] = s1;
        score[1] = s2;
        score[2] = s3;
    }
    public double get_ave(){
        return (score[0]+score[1]+score[2])/3.0;
    }

    public boolean is_graduate(){
        if(get_ave()>60) return true;
        else return false;
    }

    abstract boolean isGraduate();

}

Undergraduate类添加:

    boolean isGraduate() {
        if(get_ave()>60) return true;
        return false;
    }

Graduate类添加:

    boolean isGraduate() {
        return is_hege&&(get_ave()>60);
    }

StudentDemo类:

        //通过上转型对象调用子类重写的方法
        //调用本科生类
        Student u1=new Undergraduate("HuaHua",92.5,93.5,94.5);
        if(u1.isGraduate())  System.out.println("该学生可以毕业");
        else System.out.println("该学生不可以毕业");
        //调用研究生类
        Student u2=new Graduate("LuoLuo",96.5,68.5,90.5,88.0);
        if(u2.isGraduate()) System.out.println("该学生可以毕业");
        else System.out.println("该学生不可以毕业");

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听-起风了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值