java 类的继承和多态 1

1,设计一个抽象类,声明有关算术运算的方法,并创建一个子类继承该抽象的类,完成有理数的加、减、乘、除四则运算。

package a;
public class YouLiShu {
    int fz,fm;
    public YouLiShu(){}
    public YouLiShu(int fz, int fm) {
        int ys=this.maxYueShu(fz, fm);      
        this.fz = fz/ys;
        this.fm = fm/ys;
    }   
    public YouLiShu jia(YouLiShu a){
        int newfz=this.fz*a.fm+this.fm*a.fz;
        int newfm=this.fm*a.fm;     
        return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
    }
    public YouLiShu jian(YouLiShu a){               
        int newfz=this.fz*a.fm-this.fm*a.fz;
        int newfm=this.fm*a.fm;     
        return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
    }
    public YouLiShu cheng(YouLiShu a){
        int newfz=this.fz*a.fz;
        int newfm=this.fm*a.fm; 
        return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
    }
    public YouLiShu chu(YouLiShu a){
        int newfz=this.fz*a.fm;
        int newfm=this.fm*a.fz;     
        return new YouLiShu(newfz/maxYueShu(newfz,newfm),newfm/maxYueShu(newfz,newfm));
    }
    public String toString() {
        return(fz+"/"+fm);
    }
    public double toXiaoShu(){      
        return (this.fz*(1.0))/this.fm;
    }
    public int maxYueShu(int a,int b){  
        if (b==0) return a;
         return maxYueShu(b,a%b);
    }
}

package a;

public class Testsy1 {
    public static void main(String[] args) {
        YouLiShu y1=new YouLiShu(2,4);
        YouLiShu y2=new YouLiShu(2,5);
        System.out.println("2/4+2/5="+y1.jia(y2).toString()+" "+y1.jia(y2).toXiaoShu());
        System.out.println("2/4-2/5="+y1.jian(y2).toString()+" "+y1.jian(y2).toXiaoShu());
        System.out.println("2/4*2/5="+y1.cheng(y2).toString()+" "+y1.cheng(y2).toXiaoShu());
        System.out.println("2/4 / 2/5="+y1.chu(y2).toString()+" "+y1.chu(y2).toXiaoShu());
    }
}

2,编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义Gymnastics类和School类,它们都是ComputerAverage的子类,Gymnastics类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分。School中计算平均分的方法是直接是总分除以总科目。
要求:定义ComputerAverage的对象为上转型对象,并调用重写的方法averge。

package b;

public abstract class ComputerAverage {
    public abstract double average(double[] s);
}
package shiyan3;

public class Gymnastics extends ComputerAverage{
    public double average(double s[]) {
        for(int i=0;i<s.length-1;i++)
        {
            for(int j=i;j<s.length-1;j++)
            {
                if(s[i]>s[i+1])
                {
                    double t=s[i];
                    s[i]=s[i+1];
                    s[i+1]=t;
                }
            }
        }
        double a=0.0;
        for(int i=1;i<s.length-1;i++)
        {
            a+=s[i];
        }
        a=a/(s.length-2);
        return a;
    }
}
package b;

public class School extends ComputerAverage{
    public double average(double s[]) {
        double a=0.0;
        for(int i=0;i<s.length;i++)
        {
            a+=s[i];
        }
        a=a/(s.length);
        return a;
    }
}
package b;

public class Testsy3 {
    public static void main(String[] args) {
        double[] c={2.2,3.4,5.6,6.2,1.4};
        ComputerAverage a=new Gymnastics();
        ComputerAverage b=new School();
        System.out.println(a.average(c));
        System.out.println(b.average(c));
    }
}

3,编写一个类,该类有如下一个方法:
public int f(int a,int b){……//要求该方法将返回a和b的最大公约数},再编写一个该类的子类,要求子类重写方法f(),而且重写的方法将返回两个正整数的最小公倍数。
要求:在重写的方法的方法体中需要调用被隐藏的方法返回a和b的最大公约数m,然后将(a*b/m)返回;在应用的程序的主类中分别使用父类和子类创建对象,并分别调用方法f()计算两个正整数的最大公约数和最小公倍数。

package c;

public class Maxgys {
    int a;
    int b;
    Maxgys(int a,int b){
        this.a=a;
        this.b=b;
    }
    int f(){
        int m=a;
        int n=b;
        if(m<n)
        {
            int t=n;
            n=m;
            m=t;
        }
        while(m%n!=0)
        {
            int t=m%n;
            m=n;
            n=t;
        }
        return n;
    }

}
package c;

public class Mingbs extends Maxgys{
    Mingbs(int a, int b) {
        super(a, b);
    }
    int f()
    {
        return a*b/super.f();
    }

}
package shiyan2;

public class Testsy2 {
    public static void main(String[] args) {
        Maxgys a=new Maxgys(6,9);
        Mingbs b=new Mingbs(9,12);
        System.out.println(a.f());
        System.out.println(b.f());
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值