继承的编程题和可选题

五、编程题

1、编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。(7分)
  提示:(1)编写一个圆类Circle,该类拥有:
  1)       一个成员变量,radius(私有,浮点型);//存放圆的半径;
  2)       两个构造方法
  Circle()              //将半径设为0
  Circle(double  r )    //创建Circle对象时将半径初始化为r
  3)       三个成员方法
  double getArea()      //获取圆的面积
  double getPerimeter()  //获取圆的周长
  void show()           //将圆的关径、周长、面积输出到屏幕
                  (2) 编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
  1)       一个成员变量,double hight  (私有,浮点型);  //圆柱体的高;
  2)       构造方法
  //创建Cylinder对象时将半径初始化为r,高度初始化为h
  Cylinder(double r,double h)
  3)       成员方法
  double getVolume()            //获取圆柱体的体积
  void showVolume()             //将圆柱体的体积输出到屏幕

class Circle {
    double radius;

    // 无参构造器
    public Circle() {
        this.radius = 0;
    }

    // 有参构造器
    public Circle(double r) {
        this.radius = r;
    }

    //获取圆的面积
    public double getArea() {
        double s = Math.PI * this.radius * this.radius;
        return s;
    }

    //获取圆的周长
    public double getPerimeter() {
        double c = 2 * Math.PI * this.radius;
        return c;
    }

    //将圆的半径、周长、面积输出到屏幕
    public void show() {
        System.out.println("圆的半径是:" + this.radius);
        System.out.print("圆的周长是:");
        System.out.printf("%.2f", getPerimeter());
        System.out.print("\n圆的面积是:");
        System.out.printf("%.2f", getArea());
    }
}

 class Cylinder extends Circle {
    double hight;// 圆柱体的高

    public Cylinder(double r, double h) {
        super(r);
        this.hight = h;
    }

    // 获取圆柱体的体积
    public double getVolume() {
        double s = super.getArea();
        double v = s * this.hight;
        return v;
    }

    //将圆柱体的体积输出到屏幕
    public void showVolume() {
        System.out.print("\n圆柱的体积是:");
        System.out.printf("%.2f", getVolume());
    }
}

public class Test1 {
    public static void main(String[] args) {
        Cylinder c = new Cylinder(3, 6);
        Circle ci = new Circle(5);
        ci.show();
        c.showVolume();
    }
}

2、请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息。
设定
1)出租车类:
属性包括:车型,车牌,所属出租公司;方法包括:启动,停止
2)家用轿车类:
属性包括:车型,车牌,车主姓名;方法包括:启动,停止
要求
1)分析出租车和家用轿车的公共成员,提取出父类—汽车类
2)利用继承机制,实现出租车类和家用轿车类
3)编写测试类,分别测试汽车类,出租车类和家用轿车类对象的相关方法
4)定义名为car的包存放汽车类,出租车类,家用轿车类和测试类

class Car { //父类-->汽车类
    //设置属性的私有访问权限
    private String type; //车型
    private String carNum; //车牌

    //通过公有的get,set方法实现对属性的访问
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCarNum() {
        return carNum;
    }

    public void setCarNum(String carNum) {
        this.carNum = carNum;
    }

    //构造器
    public Car() {
        super();
    }

    public Car(String type, String carNum) {
        super();
        this.type = type;
        this.carNum = carNum;
    }

    //启动的方法
    public void start() {
        System.out.println("我是车,我启动");
    }

    //停止的方法
    public void stop() {
        System.out.println("我是车,我停止");
    }

}


class Taxi extends Car { //子类-->出租车类
    //设置属性的私有访问权限
    private String company; //所属出租公司

    //通过公有的get,set方法实现对属性的访问
    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    //构造器
    public Taxi() {
        super();
    }

    public Taxi(String type, String carNum, String company) {
        super(type, carNum);
        this.company = company;
    }

    //启动的方法-->方法重写
    public void start() {
        System.out.println("乘客您好\n我是" + company + "的,我的车牌是" + super.getCarNum() + ",您要去哪里?");
    }

    //停止的方法-->方法重写
    public void stop() {
        System.out.println("目的地已经到了,请您付费下车,欢迎再次乘坐");
    }

}


class OwnCar extends Car { // 子类-->家用轿车类
    // 设置属性的私有访问权限
    private String name; // 车主姓名

    // 通过公有的get,set方法实现对属性的访问
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 构造器
    public OwnCar() {
        super();
    }

    public OwnCar(String type, String carNum, String name) {
        super(type, carNum);
        this.name = name;
    }

    // 启动的方法-->方法重写
    public void start() {
        System.out.println("我是" + name + ",我的汽车我做主");
    }

    // 停止的方法-->方法重写
    public void stop() {
        System.out.println("目的地到了,我们去玩吧");
    }

}

public class Test2 { //测试类
    public static void main(String[] args) {
        Car c = new Car(); //创建父类对象
        c.start(); //调用方法
        c.stop(); //调用方法
        System.out.println("==========================================");

        OwnCar oc = new OwnCar("", "", "武大郎"); //创建子类对象
        oc.start(); //调用方法
        oc.stop(); //调用方法
        System.out.println("==========================================");

        Taxi t = new Taxi("", "京B123", "景顺出租车公司");  //创建子类对象
        t.start(); //调用方法
        t.stop(); //调用方法

    }
}

3、公司要开发新游戏,请用面向对象的思想,设计游戏中的蛇怪和蜈蚣精
  设定
  1)       蛇怪类:
  属性包括:怪物名字,生命值,攻击力
  方法包括:攻击,移动(曲线移动),补血(当生命值<10时,可以补加20生命值)
  2)       蜈蚣精类:
  属性包括:怪物名字,生命值,攻击力
  方法包括:攻击,移动(飞行移动)
  要求
  1)       分析蛇怪和蜈蚣精的公共成员,提取出父类—怪物类
  2)       利用继承机制,实现蛇怪类和蜈蚣精类
  3)       攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力
  4)       编写测试类,分别测试蛇怪和蜈蚣精的对象及相关方法
  5)       定义名为mon的包存怪物类,蛇怪类,蜈蚣精类和测试类

class Monster {
    String name;
    int healthpoint;// 生命值
    int Attack;// 攻击力

    public String getName() {
        return name;
    }

    public int getHealthpoint() {
        return healthpoint;
    }

    public int getAttack() {
        return Attack;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setHealthpoint(int healthpoint) {
        this.healthpoint = healthpoint;
    }

    public void setAttack(int attack) {
        this.Attack = attack;
    }

    //攻击
    public void attack() {
        System.out.println("怪物" + getName() + "展开攻击");
        System.out.println("当前的生命值是:" + getHealthpoint());
        System.out.println("攻击力是:" + getAttack());
    }

    //移动
    public void move() {
    }
    
}

class Snake extends Monster {
    //补血(当生命值<10时,可以补加20生命值)
    public void addHP() {
        if (getHealthpoint() < 10) {//当生命值<10时,可以补加20生命值
            healthpoint = getHealthpoint() + 20;
            System.out.println("施展大蛇补血术。。。。。当前的生命值是:" + healthpoint);
        }

    }

    //方法重写-重写父类move();
    public void move() {
        System.out.println("我是蛇怪,我走S行线路!");
    }
    
}

class Centipede extends Monster {
    // 方法重写-重写父类move();
    public void move() {
        System.out.println("我是蜈蚣精,我御风飞行!");
    }
}

public class Test3 {
    public static void main(String[] args) {

        // 创建蛇对象
        Snake s = new Snake();
        s.setName("金蛇怪");
        s.setHealthpoint(1);
        s.addHP();
        s.setAttack(100);
        s.attack();
        s.move();
        // 创建蜈蚣对象
        System.out.println();
        Centipede ce = new Centipede();
        ce.setName("紫衣蜈蚣");
        ce.setHealthpoint(30);
        ce.setAttack(70);
        ce.attack();
        ce.move();
    }
}

六、可选题

1、请用面向对象的思想,设计自定义类描述演员和运动员的信息
  设定
  1)       演员类:
  属性包括:姓名,年龄,性别,毕业院校,代表作
  方法包括:自我介绍
  2)       运动员类:
  属性包括:姓名,年龄,性别,运动项目,历史最好成绩
  方法包括:自我介始
  要求
  3)       分析演员和运动员的公共成员,提取出父类—人类
  4)       利用继承机制,实现演员类和运动员类
  5)       编写测试类,分别测试人类,演员类和运动员类对象及相关方法
  6)       定义名为act的包存人类,演员类,运动员类和测试类

class People {
    private String name;
    private int age;
    private String sex;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    //公共方法-自我介绍
    public void introduce() {
        System.out.println("大家好!我是:" + getName());
        System.out.println("今年" + getAge() + "岁");
        System.out.println("我是一个" + getSex() + "生");
    }
}

class Sportsman extends People {
    private String project;
    private String grade;

    public String getProject() {
        return project;
    }

    public String getGrade() {
        return grade;
    }

    public void setProject(String project) {
        this.project = project;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public void title() {
        System.out.println("我就是一个普通的小老百姓");
        System.out.println("=====================");
    }

    //运动员介绍-运动项目,历史最好成绩
    public void info() {
        System.out.println("我最擅长的运动项目是:" + getProject() + "短跑");
        System.out.println("历史最好的成绩是:" + getGrade());
    }

}

class Actor extends People {
    private String graduate;
    private String representative;

    public String getGraduate() {
        return graduate;
    }

    public String getRepresentative() {
        return representative;
    }

    public void setGraduate(String graduate) {
        this.graduate = graduate;
    }

    public void setRepresentative(String representative) {
        this.representative = representative;
    }

    //演员介绍-毕业院校,代表作
    public void info() {
        System.out.println("毕业院校:" + getGraduate());
        System.out.println("代表作:" + getRepresentative());
    }

    public void title1() {
        System.out.println("=====================");
    }
}

public class Test4 {
    public static void main(String[] args) {
        //运动员对象
        Sportsman s = new Sportsman();
        s.setName("刘小翔");
        s.setAge(23);
        s.setSex("男");
        s.setProject("200");
        s.setGrade("22秒30");
        s.title();
        s.introduce();
        s.info();

        //演员对象
        Actor a = new Actor();
        a.setName("章依");
        a.setAge(27);
        a.setSex("女");
        a.setGraduate("北京电影学院");
        a.setRepresentative("《寄往天国的家书》");
        a.title1();
        a.introduce();
        a.info();
    }