【java】继承与多态 接口练习

题目:

 定义容器Container接口。模拟实现一个容器类层次结构,并进行接口的实现、抽象方法重写和多态机制测试。各容器类实现求面积、周长的方法。

  1. 定义接口Container:
  2. 属性:
  3. public static final double pi=3.14 ;
  4. 抽象方法:
  5. public abstract double area();
  6. public abstract double perimeter();
  7. static double sumofArea(Container c[]);
  8. static double sumofPerimeter(Container c[]);
  9. 其中两个静态方法分别计算返回容器数组中所有对象的面积之和、周长之和;
  10. 定义Rectangle类、Circle类均实现自Container接口。
  11. Rectangel类(属性:长,宽double类型)、Circle类(属性:半径,double类型)。

输入格式:

第一行n表示对象个数,对象类型用Rectangle、Circle区分,Rectangle表示长方形对象,后面输入长,宽,输入Circle表示圆对象,后面是输入半径。

输出格式:

分别输出所有容器对象的面积之和、周长之和,结果保留小数点后2位。

输入样例:

在这里给出一组输入。例如:

4

Circle

15.7

Rectangle

23.5 100

Circle

46.8

Rectangle

17.5 200

输出样例:

在这里给出相应的输出。例如:

周长之和:56771.13

面积之和:472290.12

package com.experiment.twoT2;

public class Circle implements Container{
    private double radius;
    public Circle(){
        this.radius=0;
    }
    public Circle(double radius){
        this.radius=radius;
    }
    public double area(){
        return Math.pow(this.radius,2)*pi;
    }
    public double perimeter(){
        return 2*pi*this.radius;
    }
}
package com.experiment.twoT2;

public interface Container {
//接口中的"变量"默认都是 "public static final"类型,即为常量
    double pi=3.14;   //在接口里面定义常量不用final修饰,接口里面定义的常量本来就时不可变的
    double area();    //接口里面定义的抽象函数也不用abstract修饰,本来就是抽象的
    double perimeter();
    static double sumofArea(Container c[]) {
        double sumofArea=0.0;
        for(int i=0;i<c.length;i++) {
            sumofArea+=c[i].area();
        }
        return sumofArea;
    }
    static double sumofPerimeter(Container c[]) {
        double sumofPerimeter=0.0;
        for(int i=0;i<c.length;i++) {
            sumofPerimeter+=c[i].perimeter();
        }
        return sumofPerimeter;
    }
}
package com.experiment.twoT2;

public class Rectangle implements Container{
    private double length;
    private double width;
    public Rectangle(){
        this.length=0;
        this.width=0;
    }
    public Rectangle(double length,double width){
        this.length=length;
        this.width=width;
    }
    public double area(){
        return this.length*this.width;
    }
    public double perimeter(){
        return (this.length+this.width)*2;
    }
}
package com.experiment.twoT2;

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        int i=0;
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        Container a[]=new Container[n];
        for(i=0;i<a.length;i++){
            String name=sc.next();
            if(name.equals("Circle")) {
                //double radius=sc.nextDouble();
                a[i]=new Circle(sc.nextDouble());  //在接口数组中传入类与参数
            }
            else if(name.equals("Rectangle")) {
                /*double length = sc.nextDouble();
                double width = sc.nextDouble();*/
                a[i]=new Rectangle(sc.nextDouble(), sc.nextDouble());
            }
            else{
                System.out.println("输入错误,请重新运行该程序!");
                break;
            }
        }
        System.out.printf("周长之和:%.2f%n", Container.sumofPerimeter(a));
        System.out.printf("面积之和:%.2f%n", Container.sumofArea(a));
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提到了头歌实践作业中关于Java继承多态练习和任务描述。引用给出了Java继承的语法示例,可以使用extends关键字实现类的继承。引用提到了方法的重写和重载是Java多态性的不同表现,重写是父类与子类之间多态性的一种表现,而重载则是多态的具体表现形式。 综合来看,头歌中的练习和任务描述主要涉及Java继承多态继承是一种面向对象的编程概念,它允许一个类继承另一个类的属性和方法。在Java中,可以使用extends关键字来实现类的继承。而多态性则是指一个对象可以具有多种形态,即同一个方法可以在不同的对象上产生不同的行为。在Java中,多态性的表现包括方法的重写和重载。方法的重写是指子类重新定义父类中已经存在的方法,以实现自己的逻辑。而方法的重载是指在同一个类中定义多个同名但参数列表不同的方法。这些概念都是Java面向对象编程中重要的概念,对理解和应用Java编程语言非常重要。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [头歌实践-Java继承多态](https://blog.csdn.net/weixin_53463734/article/details/121021181)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [十三、 封装、继承多态](https://blog.csdn.net/CaesarQu/article/details/117373505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值