Java面向对象编程练习题

第1关:正方体底面周长、底面面积和体积计算

  • 任务要求
  • 参考答案
  • 评论28

任务描述

本关任务:编程正方体类,计算正方体的底面周长、底面面积和体积。

相关知识

为了完成本关任务,你需要掌握:1.类的继承,2.superthis关键字。

类的继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法。

格式说明:

 
  1. class 父类 {
  2. }
  3. class 子类 extends 父类 {
  4. }

举例说明:

  • 小孩:属性(姓名,年龄,性别),方法(吃饭,睡觉,上学);
  • 老人:属性(姓名,年龄,性别),方法(吃饭,睡觉);

从上可以看出,小孩和老人有相同的属性和一些相同的方法,我们可以将其相同的属性和方法提取出来写在父类(Person)中,将不同部分写在子类中。 代码为:

 
  1. class Person{
  2. string name;
  3. int age;
  4. string sex;
  5. void eat(){
  6. System.out.println(name+"需要吃饭");
  7. }
  8. void sleep(){
  9. System.out.println(name+"需要睡觉");
  10. }
  11. }
  12. class Student extends Person{
  13. void goschool(){
  14. System.out.println(name+"需要上学");
  15. }
  16. }
  17. class Elder entends Person{
  18. }
super和this关键字

super关键字:我们可以通过super关键字实现对父类成员的访问,用来引用当前对象的父类。 this关键字:指向自己的引用。

举例说明:

 
  1. class Animal {
  2. void eat() {
  3. System.out.println("animal : eat");
  4. }
  5. }
  6. class Dog extends Animal {
  7. void eat() {
  8. System.out.println("dog : eat");
  9. }
  10. void eatTest() {
  11. this.eat(); // this 调用自己的eat方法
  12. super.eat(); // super 调用父类的eat方法
  13. }
  14. }
  15. public class Test {
  16. public static void main(String[] args) {
  17. Animal a = new Animal();
  18. a.eat();
  19. Dog d = new Dog();
  20. d.eatTest();
  21. }
  22. }

输出为:

 
  1. animal : eat
  2. dog : eat
  3. animal : eat
编程要求

上一次实验中定义了矩形类Rectangle

  • 成员变量有:widthlength
  • 成员方法有:area()perimeter()

派生一个子类:正方体类Cube。若正方体类的操作是求

  • 底面周长
  • 底面面积
  • 正方体体积

思考:这个子类除了从父类那里继承来的方法之外,还需要做哪些修改?

编写一个正方体类,要求实现:

  • 使用两种构造方法
  • 至少各创建一个正方体对象实例(cc1),c的边长为10c1的边长为5
  • 分别计算两个正方体的底面周长、底面面积和体积。
测试说明

无测试输入 预期输出: c底面周长:40.0 c底面面积:100.0 c体积:1000.0 c1底面周长:20.0 c1底面面积:25.0 c1体积:125.0


开始你的任务吧,祝你成功!

package step1;

//编写一个Cube类继承Rectangle

public class Cube extends Rectangle{

    /*********begin*********/

    //创建两个构造函数  

    //创建 无参 构造函数  调用父类构造方法默认 宽高 都为10

    public Cube(){

        super(10,10);

    }

   

    //创建 有参 构造函数 参数为 double d

    public Cube(double d){

        super(d,d);

    }

    //调用父类中的area方法和perimeter方法

    public double area(){//底面面积

        return super.area();

       

    }

     

    public double perimeter(){  //底面周长

        return super.perimeter();

    }

    //编写计算体积的方法

    public double tj(){

        return super.area() * super.getWidth();

    }


 

   

   

       

    public static void main(String[] args){

    //创建两个正方体实例对象,并按相应格式输出正方体的底面周长,底面面积和体积。

   

   

    //创建一个 无参 正方体对象

    Cube c = new Cube();

    System.out.println("c底面周长:"+ c.perimeter());

    System.out.println("c底面面积:"+ c.area()  );

    System.out.println("c体积:"+  c.tj() );

                       

    //创建一个 有参 正方体对象 参数值为: 5

    Cube c1 = new Cube(5);                  

    System.out.println("c1底面周长:"+ c1.perimeter()  );

    System.out.println("c1底面面积:"+ c1.area() );

    System.out.println("c1体积:"+   c1.tj() );                  

    /*********end*********/

    }

}

第2关:圆

  • 任务要求
  • 参考答案
  • 评论28

任务描述

本关任务:在Circle类中,构造两个不同的圆,输出圆的信息。

相关知识

为了完成本关任务,你需要掌握:1.私有变量的继承,2.toString方法 #####私有变量的继承 无论父类中的成员变量是privatepublic还是其它类型的,子类都会继承父类中的这些成员变量。但是父类中的私有(private)成员变量,无法在子类中直接访问,可以通过从父类中继承得到的protectedpublic方法(如gettersetter方法)来访问。

举例说明:

 
  1. public class Person{
  2. private String name;
  3. public Person(String name){
  4. this.name = name;
  5. }
  6. public void setName(String name){
  7. this.name = name;
  8. }
  9. public String getName(){
  10. return name;
  11. }
  12. }
  13. public class Student extends Person{
  14. public Student(String name){
  15. super(name);
  16. }
  17. public static void main(String[] args){
  18. Student mStudent = new Student("abc");
  19. String mName = mStudent.getName();
  20. System.out.println("Name is : " + mName);
  21. mStudent.setName("efg");
  22. mName = mStudent.getName();
  23. System.out.println("Name is : " + mName);
  24. }
  25. }

预期输出: Name is : abc Name is : efg

toString方法

System.out.println()输出一个对象的时候,java默认调用对象的toString()方法。一般需要覆盖这个方法,这样根据覆盖逻辑你就可以输出自己的对象。

举例说明: 定义一个类User,有id,name属性,你直接输出一个user对象的话System.out.println(user),得到的只是“全限定名@地址首地址”,如果你在User类里面覆盖这个toString方法的话就能输出你想要的语句。 举例说明:

 
  1. public class User{
  2. public int id;
  3. public String name;
  4. public User(int id,String name){
  5. this.id=id;
  6. this.name=name;
  7. }
  8. public String toString(){
  9. return "user name is:"+ name +";"+"user id is:"+ id;
  10. }
  11. public static void main(String[] args){
  12. User user = new User(3,"dsda");
  13. System.out.println(user);
  14. }
  15. }

预期输出:user name is :zhangshan;user id is: 1;

编程要求
  • Point类描述“点”类,拥有两个成员变量xy(分别代表点的横坐标和纵坐标),给Point类两个自定义的构造方法。

  • Circle类描述“圆”类,是Point类的一个子类,这里点(x,y)为圆的圆心,并拥有一个成员变量radius(代表圆的半径),给Circle两个自定义的构造方法。分别覆盖每个类中的toString()方法,并在构造方法中借助toString()方法显示PointCircle各自的基本描述信息。

  • Circle中,构造两个不同的圆,调用构造方法,输出圆的信息。

:在实训里切换文件方法如下:

测试说明

无测试输入 预期输出: 第一个圆的信息: Point constructor:Center=[0.0,0.0]radius=0.0 Circle constructor:Center=[0.0,0.0]radius=10.0 第二个圆的信息: Point constructor:Center=[10.0,10.0]radius=0.0 Circle constructor:Center=[10.0,10.0]radius=5.0


开始你的任务吧,祝你成功!

package step2;

public class Circle extends Point {

    private double radius;

    /*********begin*********/

    //编写两个构造方法,无参函数中的半径默认为10,x和y均为0;

    //在构造方法中输出Circle constructor:  加上 toString方法输出的结果

    public Circle(){

        super();

        this.radius = 10.0;

        System.out.println("Circle constructor:" + this.toString());

    }

    public Circle(double radius,double x,double y){

        super(x,y);

        this.radius = radius;

        System.out.println("Circle constructor:" + this.toString());

    }

   

    //编写toString方法

    public String toString(){

        return "Center="+super.toString()+"radius="+this.radius;

    }

    /*********end*********/

    public static void main(String[] args) {

        Circle cir1, cir2;

        System.out.println("第一个圆的信息:");

        /*********begin*********/

        //构造第一个圆cir1

        cir1 = new Circle();

       

        System.out.println("第二个圆的信息:");

        //构造第二个圆cir2,x为10,y为10,半径为5

        cir2 = new Circle(5.0,10.0,10.0);

        /*********end*********/

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值