栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java日常一练】Java 面向对象十道练习题【04】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java日常一练】Java 面向对象十道练习题【04】

十道面向对象练习题

一、往期知识回顾二、题目

1、写一个符合JavaBean规范的Student学生类,属性分别是:姓名、年龄、成绩、性别、是否毕业等,使用IDEA或者Eclipse工具生成对应的getter和setter方法。2、编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;3、 创建一个杯子对象,属性为颜色、价格和品牌,方法为:摔坏并价掉为0,盛水。 4、写一个图片类,具有属性:宽度、长度、路径、类型、大小;具有方法:显示、隐藏、获取信息、更改路径等。

5、使用继承实现:6、使用组合实现:7、编写一个形状类Shape,具有名字name属性,具有抽象方法getArea()计算面积,以及抽象方法getPerimeter()计算周长;要求:8、学生成绩管理系统中,学生可以注册账号;注册账号时进行账号激活-手机验证码、邮箱激活链接、人脸识别等操作9、学生成绩管理系统中,学生和管理员两个不同的人员进行登录同一个网页。10:我们家用电一般是220V,而手机用电是5V,假设:

一、往期知识回顾

1、判断语句练习题:https://blog.csdn.net/m0_55586329/article/details/122441587

2、循环语句练习题:https://blog.csdn.net/m0_55586329/article/details/122451061

3、判断语句理论知识:https://blog.csdn.net/m0_55586329/article/details/116331989

4、数组理论实践知识:https://blog.csdn.net/m0_55586329/article/details/116840485

5、数组十道练习题:https://blog.csdn.net/m0_55586329/article/details/122482097

二、题目 1、写一个符合JavaBean规范的Student学生类,属性分别是:姓名、年龄、成绩、性别、是否毕业等,使用IDEA或者Eclipse工具生成对应的getter和setter方法。
// 直接用快捷键ALT+SHILT+INSERT或者邮件进行生成getter和setter,一般固定的代码自动生成比较好。

public class Student {
    private String name;
    private int age;
    private float score;
    private String gender;
    private boolean graduate;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public float getScore() {
        return score;
    }

    public void setScore(float score) {
        this.score = score;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public boolean isGraduate() {
        return graduate;
    }

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

2、编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;
// 思路:根据题目要求,有两个私有属性,以及两个方法,因此需要编写两个方法,难度不是很大。
public class Manager {
    private String groom;
    private String tamer;

    public void feed() {
        System.out.println("饲养");
    }

    public void perform() {
        System.out.println("表演");
    }
}
3、 创建一个杯子对象,属性为颜色、价格和品牌,方法为:摔坏并价掉为0,盛水。
public class Cup {
    private String color;
    private double price;
    private String brand;

    public void badCup() {
        price = 0;
        System.out.println("摔坏杯子");
    }

    public void fillWater() {
        System.out.println("盛水");
    }
}
4、写一个图片类,具有属性:宽度、长度、路径、类型、大小;具有方法:显示、隐藏、获取信息、更改路径等。
public class Images {
    private double width;
    private double height;
    private String imagesURL;
    private String type;
    private double size;

    public void display() {
        System.out.println("显示图片");
    }

    public void hidden() {
        System.out.println("隐藏路径");
    }

    public void getImagesInformation() {
        System.out.println("获取图片的信息");
    }

    public void setImagesURL() {
        System.out.println("更改图片的路径");
    }
}
5、使用继承实现:

(一)编写一个动物园管理员类Manager,有方法feed饲养动物,有方法perform表演;(二)编写一个饲养员类Keeper,有方法feed饲养;继承于管理员;(三)编写一个驯兽师类Trainer,有方法perform表演;继承于管理员;(四)新建测试类,创建管理员调用方法进行测试。
(1)、动物园管理类Manager

public class Manager {
    public void feed() {
        System.out.println("eat");
    }

    public void perform() {
        System.out.println("表演");
    }
}

(2)、饲养员类Keeper

public class Keeper extends Manager {
    @Override
    public void feed() {
        System.out.println("继承管理员的feed方法");
    }
}

(3)、驯兽师类Trainer

public class Trainer extends Manager {
    @Override
    public void perform() {
        System.out.println("狮子表演了");
    }
}

(4)、测试类

public class TestManager {
    public static void main(String[] args) {
        Manager keeper = new Keeper();
        Manager trainer = new Trainer();
        keeper.feed();
        trainer.perform();
    }
}

运行结果:

6、使用组合实现:

(一)编写一个饲养员类Keeper,有方法feed饲养;(二)编写一个驯兽师类Trainer,有方法perform表演;(三)编写一个动物园管理员类Manager,有两个私有属性:饲养员和驯兽师;有方法feed饲养动物,有方法perform表演;(四)新建测试类,创建管理员调用方法进行测试。

思路:组合,说明将两个或者多个不同的类的功能组合在一起,构建出一共完整的功能,因为对象不同,所以功能也不同,因此我们使用组合的将对象组合就行了,相比于继承也会更加方便一些。

// 1、饲养员Keeper
public class Keeper {
    public void feed() {
        System.out.println("饲养员喂养食物");
    }
}
// 2、驯兽师Trainer
public class Trainer {
    public void perform() {
        System.out.println("动物表演的方法");
    }
}
// 3、管理员的方法
public class Manager {
    private final Keeper keeper = new Keeper();
    private final Trainer trainer = new Trainer();

    public void feed() {
        keeper.feed();
    }

    public void perform() {
        trainer.perform();
    }
}

测试类

public class TestManager {
    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.feed();
        manager.perform();
    }
}
7、编写一个形状类Shape,具有名字name属性,具有抽象方法getArea()计算面积,以及抽象方法getPerimeter()计算周长;要求:

(一)编写形状类的实现类圆形Circle,有属性半径;具体类长方形Rectangle,有属性长和宽,具体类三角形Triangle,有属性三条边(二)编写计算机类Computer,添加计算形状面积的方法calculateArea(Shape),以及计算形状周长的方法calculatePerimeter(Shape)(三)编写测试类,测试类添加静态方法:makeShape(int),根据参数返回不同的形状,使用计算机计算不同形状的面积和周长。注:三角形面积计算公式:S=sqrt[p(p-a)(p-b)(p-c)],其中sqrt为开平方根,Math类有该方法,p=(a+b+c)/2即三边之和的一半,严格来说,三边有两边之和不大于另一半那么可以直接返回面积0,这点可不做实现。

(1)、形状类Shape

public abstract class Shape {
    private String name;

    public abstract void getArea();

    public abstract void getPerimeter();
}

(2)、圆形Circle

public class Circle extends Shape {
    private double r;

    public Circle() {
    }

    public Circle(double r) {
        this.r = r;
    }

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }

    // 获取面积的方法
    @Override
    public void getArea() {
        double area = 3.14 * r * r;
        System.out.println("圆的面积=" + area);
    }

    // 计算圆的周长方法
    @Override
    public void getPerimeter() {
        double length = 2 * Math.PI * r;
        System.out.println("圆的周长为=" + length);
    }
}

(3)、长方形

public class Rectangle extends Shape {
    private double length;
    private double width;

    public Rectangle() {
    }

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWidth() {
        return width;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    // 长方形计算面积的方法
    @Override
    public void getArea() {
        double rectangleArea = this.width * this.length;
        System.out.println("长方形的面积为=" + rectangleArea);
    }

    // 计算周长的方法
    @Override
    public void getPerimeter() {
        double rectanglePerimeter = 2 * (this.length + this.width);
        System.out.println("长方形的周长为=" + rectanglePerimeter);
    }
}

(4)、计算机Computer

public class Computer {

    public void calculateArea(Shape shape) {
        if (shape instanceof Rectangle) {
            Rectangle rectangle = (Rectangle) shape;
            rectangle.getArea();
        } else if (shape instanceof Circle) {
            Circle circle = (Circle) shape;
            circle.getArea();
        } else if (shape instanceof Triangle) {
            Triangle triangle = (Triangle) shape;
            triangle.getArea();
        } else {
            System.out.println("输入有误");
        }
    }


    public void calculatePerimeter(Shape shape) {
        if (shape instanceof Rectangle) {
            Rectangle rectangle = (Rectangle) shape;
            rectangle.getPerimeter();
        } else if (shape instanceof Circle) {
            Circle circle = (Circle) shape;
            circle.getPerimeter();
        } else if (shape instanceof Triangle) {
            Triangle triangle = (Triangle) shape;
            triangle.getPerimeter();
        } else {
            System.out.println("输入有误");
        }
    }
}

(6)、测试类

public class TestShape {
    public static void main(String[] args) {
        System.out.println("-----------计算面积系统------------");
        System.out.println("------1、计算圆面积及周长-------");
        System.out.println("------2、计算长方形的面积及周长-------");
        System.out.println("------3、计算三角形的面积及周长-------");
        System.out.print("请选择:");
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();
        switch (number) {
            case 1:
                makeShape(1);
                break;
            case 2:
                makeShape(2);
                break;
            case 3:
                makeShape(3);
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }

    public static void makeShape(int number) {
        Computer computer = new Computer();
        Scanner scanner = new Scanner(System.in);
        if (number == 1) {
            Circle circle = new Circle();
            System.out.print("请输入圆的半径:");
            double r = scanner.nextDouble();
            circle.setR(r);
            computer.calculateArea(circle);
            computer.calculatePerimeter(circle);
        } else if (number == 2) {
            Rectangle rectangle = new Rectangle();
            System.out.print("请输入长方形的宽:");
            double width = scanner.nextDouble();
            rectangle.setWidth(width);
            System.out.print("请输入长方形的长:");
            double length = scanner.nextDouble();
            rectangle.setLength(length);
            computer.calculateArea(rectangle);
            computer.calculatePerimeter(rectangle);
        } else if (number == 3) {
            Triangle triangle = new Triangle();
            System.out.print("请输入三角形的第一条边:");
            double width = scanner.nextDouble();
            triangle.setWidth(width);
            System.out.print("请输入三角形的第二条边:");
            double length = scanner.nextDouble();
            triangle.setLength(length);
            System.out.print("请输入三角形的第三条边:");
            double height = scanner.nextDouble();
            triangle.setHeight(height);
            // 注意三角形有一些限制,两条边之和要大于第三边,即a+b>c 三角形面积计算公式:S=sqrt[p(p-a)(p-b)(p-c)],其中sqrt为开平方根,Math类有该方法,p=(a+b+c)/2即三边之和的一半,
            if (width + length > height) {
                if (length + height > width) {
                    if (width + height > length) {
                        computer.calculateArea(triangle);
                        computer.calculatePerimeter(triangle);
                    }
                } else {
                    System.out.println("输入的三边不能构成三角形");
                }
            } else {
                System.out.println("输入的三边不能构成三角形");
            }
        } else {
            System.out.println("您输入的信息有误!");
        }
    }
}

(7)、运行结果

8、学生成绩管理系统中,学生可以注册账号;注册账号时进行账号激活-手机验证码、邮箱激活链接、人脸识别等操作
// 主要考察的是运行时多态问题
// 分析:学生在进行注册账号的时候可以进行账号验证以及邮件激活链接,说明得有这两个方法,账号注册的时候进行验证分析就好。
// 学生管理系统主类型
public class StudentLogin {
    // 注册的方法
    public void register(Device device) {
        System.out.println("正在输入验证的信息");
        String reg = device.sendVerifyInfo();
        System.out.println("验证信息[" + reg + "]验证成功");
    }

    public static void main(String[] args) {
        StudentLogin studentLogin = new StudentLogin();
        Device phone = new Phone();
        studentLogin.register(phone);
        Device email = new Email();
        studentLogin.register(email);
    }
}
class Device {
    // 设备的类型
    public String sendVerifyInfo() {
        System.out.println("正在输入验证信息");
        return "default";
    }
}
public class Phone extends Device {
    // 发送验证码
    @Override
    public String sendVerifyInfo() {
        System.out.println("手机正在发送信息");
        return "phone";
    }
}
public class Email extends Device {
    // 发送激活链接
    @Override
    public String sendVerifyInfo() {
        System.out.println("邮箱正在发送信息");
        return "Email";
    }
}

运行结果

9、学生成绩管理系统中,学生和管理员两个不同的人员进行登录同一个网页。
// 难度不是很大,根据题目要求,主要考察设计时多态问题。
public class StudentManagement {
    public void login(Management management) {
        System.out.println("管理员进行登录...");
    }

    public void login(Student student) {
        System.out.println("学生正在登录...");
    }

    public static void main(String[] args) {
        StudentManagement studentManagement = new StudentManagement();
        Management management = new Management();
        Student student = new Student();
        studentManagement.login(management);
        studentManagement.login(student);
    }
}
// 学生
public class Student {
}
// 管理员
public class Management {
}
10:我们家用电一般是220V,而手机用电是5V,假设:

(一)有一个接口表示220V:IVoltage220V,有方法int output220V()输出220伏电压(二)有实现了220V的插板:OutputVoltage220V类生成的插板对象,但是不能用于手机(三)手机Phone类,有充电方法charge(IVoltage5V),只能用5V的电压,这里有IVoltage5V接口作为参数(四)如何解决这个问题呢?可以买一个适配器Adapter,适配器需要一个220V插板作为供电方,有能力接受220V并转为5V输出(五)通过这个适配器,手机正常使用!请设计这些接口和类。

这道题考察的接口与适配器的使用

// 这是输入的是220V的电压
public interface IVoltage220V {
    // 默认其输出220伏电压
    default int output220V() {
        return 220;
    }
}
// 220v电压连接220V的插排进行通电
public class OutputVoltage220V implements IVoltage220V {

}
// 因为我手机充电用的是5V的电压,因此需要使用这个标准5V接口
public interface IVoltage5V {
    int output5V();
}
// 有了5V的接口,我们就可以使用这个接口,将220V的电压通过适配器降压给手机充电。
public class IVoltageAdapter implements IVoltage5V {
    // 适配器将220V的电压转为5V的电压对手机进行充电,因此需要将电压导入先
    private IVoltage220V source;

    public IVoltageAdapter(IVoltage220V source) {
        this.source = source;
    }

    @Override
    public int output5V() {
        // 在这里将220V电压转为5V
        return this.source.output220V() / 44;
    }
}
// 给手机进行充电进行测试
public class Phone {
    // 充电的方法
    public void charge(IVoltage5V iVoltage5V) {
        if (iVoltage5V.output5V() > 5) {
            System.out.println("不能正常充电,当前电压是" + iVoltage5V.output5V());
        } else {
            System.out.println("正在充电,使用的电压是" + iVoltage5V.output5V());
        }
    }
}
// 我们220V的电压不可以直接给手机充电,因此需要适配器将电压降为5V在再给手机充电
public class TestMain {
    public static void main(String[] args) {
        OutputVoltage220V outputVoltage220V = new OutputVoltage220V();
        Phone phone = new Phone();
        IVoltageAdapter iVoltageAdapter = new IVoltageAdapter(outputVoltage220V);
        phone.charge(iVoltageAdapter);
    }
}

运行结果

小白一枚,如果有错误的地方,麻烦各位前辈指教一下,感谢!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号