Java学习笔记49——封装练习

1、使用面向对象的思想,编写自定义描述狗的信息。设定属性包括:品种,年龄,心情,名字;方法包括:叫,跑。

要求:

  • 设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
  • 限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示,默认设置“心情好”。
  • 设置构造函数实现对属性赋值
  • 叫和跑的方法,需要根据心情好坏,描述不同的行为方式。
  • 编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)

运行效果图:

class Dog {
    //品种,年龄,心情,名字
    private String kind;
    private int age;
    private String mood;
    private String name;

    public Dog() {
    }

    public Dog(String kind, int age, String name) {
        this.kind = kind;
        this.age = age;
        this.name = name;
    }

    //公有的get,set方法
    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    public int getAge() {
        return age;
    }

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

    public String getMood() {
        return mood;
    }

    public void setMood(String mood) {
        if ("心情好".equals(mood) || "心情不好".equals(mood)) {
            this.mood = mood;
        } else {
            System.out.println("输入信息错误,这只狗狗今天心情很好!");
            this.mood = "心情好";
        }

    }

    public String getName() {
        return name;
    }

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

    public String shout() {
        if ("心情好".equals(mood)) {
            return "开心的汪汪叫";
        } else {
            return "伤心的呜呜叫";
        }
    }

    public String run() {
        if ("心情好".equals(mood)) {
            return "开心的围着主人转";
        } else {
            return "伤心的一动不动";
        }
    }

    public void show() {
        System.out.println("名字叫" + name + "的" + kind + mood + ", " + this.run());
        System.out.println("名字叫" + name + "的" + kind + mood + ", " + this.shout());
    }
}


public class Test1 {
    public static void main(String[] args) {
        Dog dog1 = new Dog("贵宾犬", 3, "甜心");
        dog1.setMood("心情好123");
        dog1.setMood("心情好");
        dog1.show();
        System.out.println("===================================");
        Dog dog2 = new Dog("德国牧羊犬", 4, "太子");
        dog2.setMood("心情不好");
        dog2.show();


    }
}

 

 

2、以面向对象的思想,编写自定义类描述IT从业者。设定属性包括:姓名,年龄,技术方向,工作年限,工作单位和职务;方法包括:工作

要求:

  • 设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
  • 限定IT从业人员必须年满15岁,无效信息需提示,并设置默认年龄为15。
  • 限定“技术方向”是只读属性
  • 工作方法通过输入参数,接收工作单位和职务,输出个人工作信息
  • 编写测试类,测试IT从业者类的对象及相关方法(测试数据信息自定义)

运行效果图:

class ITWork {
    private String name;
    private int age;
    private String ItDirection;
    private int years;
    private String workUnit;
    private String job;

    public ITWork(String name, int years, String ItDirection, String workUnit, String job) {
        this.name = name;
        this.years = years;
        this.workUnit = workUnit;
        this.ItDirection = ItDirection;
        this.job = job;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age < 15) {
            System.out.println("年龄信息无效!已修改默认年龄为15");
            this.age = 15;
        }
        this.age = age;
    }

    public String getItDirection() {
        return ItDirection;
    }

    public int getYears() {
        return years;
    }

    public void setYears(int years) {
        this.years = years;
    }

    public String getWorkUnit() {
        return workUnit;
    }

    public void setWorkUnit(String workUnit) {
        this.workUnit = workUnit;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public void work(String workUnit, String job) {
        System.out.println("姓名:" + name + "\r\n年龄:" + age + "\r\n技术方向:" + ItDirection
                + "\r\n工作年限:" + years + "\r\n目前就职于:" + workUnit + "\r\n职务是:" + job);
    }
}


public class Test2 {
    public static void main(String[] args) {
        ITWork worker1 = new ITWork("陶华根", 5, "大数据架构师", "阿里巴巴", "大数据开发部门");
        worker1.setAge(26);
        worker1.work(worker1.getWorkUnit(),worker1.getJob());
        System.out.println("==========================================================");
        ITWork worker2 = new ITWork("张咪", 10, "项目经理", "腾讯", "技术部门");
        worker2.setAge(28);
        worker2.work(worker2.getWorkUnit(),worker2.getJob());
    }
}

 

 

3、某公司要开发名为”我爱购物狂”的购物网站,请使用面向对象的思想设计描述商品信息

要求:

  • 分析商品类别和商品详细信息属性和方法,设计商品类别类和商品详细信息类
  • 在商品详细信息类中通过属性描述该商品所属类别
  • 设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
  • 编写测试类,测试商品类别类和商品详细信息类的对象及相关方法(测试数据信息自定)
  • 创建包info—存放商品类别类和商品详细信息类,创建包test—存放测试类

     参考分析思路:

商品类别类:

属性:类别编号,类别名称

商品详细信息类:

属性:商品编号,商品名称,所属类别,商品数量(大于0),商品价格(大于0),

方法:盘点的方法,描述商品信息。内容包括商品名称,商品数量,商品价格,现在商品总价以及所属类别信息

运行效果图:

/*
    商品详细信息类:
        属性:商品编号,商品名称,所属类别,商品数量(大于0),商品价格(大于0),
        方法:盘点的方法,描述商品信息。
        内容包括商品名称,商品数量,商品价格,现在商品总价以及所属类别信息
 */
public class GoodsInfo {
    private String goodsId;
    private String goodsName;
    private GoodsKind goodsKind;
    private int numbers;
    private double price;

    public GoodsInfo() {
    }

    public GoodsInfo(String goodsId, String goodsName, GoodsKind goodsKind) {
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.goodsKind = goodsKind;
    }

    public String getGoodsId() {
        return goodsId;
    }

    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public GoodsKind getGoodsKind() {
        return goodsKind;
    }

    public void setGoodsKind(GoodsKind goodsKind) {
        this.goodsKind = goodsKind;
    }

    public int getNumbers() {
        return numbers;
    }

    public void setNumbers(int numbers) {
        if (numbers > 0) {
            this.numbers = numbers;
        } else {
            this.numbers = 0;
        }

    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        if (price > 0) {
            this.price = price;
        } else {
            System.out.println("设置的价格有问题,请重新输入");
        }
    }

    //盘点的方法
    public void show() {
        if (numbers == 0) {
            System.out.println("库存数量异常,请联系管理员");
        }
        System.out.println("商品名称:" + goodsName);
        System.out.println("所属类别:" + goodsKind.getKingName());
        System.out.println("商品售价:" + price);
        System.out.println("库存数量:" + numbers);
        System.out.println("商品总价:" + (numbers*price));
    }
}
/*
    商品类别类:
        类别编号,类别名称
 */
public class GoodsKind {
    private String kindId;
    private String kingName;

    public GoodsKind() {
    }

    public GoodsKind(String kindId, String kingName) {
        this.kindId = kindId;
        this.kingName = kingName;
    }

    public String getKindId() {
        return kindId;
    }

    public void setKindId(String kindId) {
        this.kindId = kindId;
    }

    public String getKingName() {
        return kingName;
    }

    public void setKingName(String kingName) {
        this.kingName = kingName;
    }

    public void show(){
        System.out.println("类别编号:"+kindId+",类别名称:"+kingName);
    }
}
import com.shujia.wyh.day13.info.GoodsInfo;
import com.shujia.wyh.day13.info.GoodsKind;

public class GoodsTest {
    public static void main(String[] args) {
        //创建第一种类别
        GoodsKind kind1 = new GoodsKind("1001", "洗发水");

        //创建第一个商品
        GoodsInfo goods1 = new GoodsInfo("sj001", "潘婷洗发水400ml", kind1);
        goods1.setNumbers(10);
        goods1.setPrice(25.0);
        goods1.show();

        System.out.println("=============================================");
        //创建第二个商品
        GoodsInfo goods2 = new GoodsInfo("sj002", "蜂花洗发水250ml", kind1);
        goods2.setNumbers(0);
        goods2.setPrice(11.5);
        goods2.show();

    }
}
posted @ 2021-12-07 14:21  欧朋  阅读(197)  评论(0)    收藏  举报