通过宠物商店理解java面向对象

news2025/7/10 9:26:04

前言:本篇博客,适合刚刚学完java基础语法的但是,对于面向对象,理解不够深刻的读者,本文通过经典的宠物商店,来让读者深刻的理解,面向对象,IS-AHAS-A法则。本文不仅仅是简单的用java来模拟一个宠物商店,而是通过分析宠物商店的业务,来让大家理解,最简单的业务逻辑,即商店商品用户,这三者的逻辑,这个代码同样可以适用于,图书管理系统书店管理系统宿舍管理系统等等的入门理解。

好了本文开始了。首先我们先把题目给出来。

题目

在这里插入图片描述

业务逻辑分析

首先是分析,宠物店,动物,小猫小狗,客户之间的关系,其中最为明显的就是,小猫小狗与动物之间的关系,很显然小猫小狗继承动物的属性,他们之间属于IS-A,什么是IS-A法则,就是这种继承关系,所以,我们可以构建Animal类,思考所有动物的公共属性,比如我这里写的这个Animal类中的姓名价格性别颜色年龄这些成员,因为是举例子,所以很多地方并不会写的很全,然后再分析行为,我这里设计的他们的共有行为便是,Shout()大叫属性。

Animal这个基类成功之后,那么后续就是,设计猫类,狗类了,对于这两个类的话,为了方便理解,我们设置他们的新的成员是,对于猫来说为CatPara,对于狗来说的话是DogPara,然后他们会重写父类的Shout()方法,这里就体现了面向对象里面的多态,具体代码如下。

动物类的编写

代码如下

/*
* 讲解面向对象的三个基本特性
* IS-A法则
* HAS-A法则
* */

// 动物类
class Animal{
    private String name;  // 姓名
    private Double price; // 价格
    private Boolean sex; // 性别
    private String color; // 颜色 
    private Integer age; // 年龄

    public Animal() {
    }

    public void Shout(){ // 大叫
        System.out.println("大声的叫");
    }

    public String getName() {
        return name;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Boolean getSex() {
        return sex;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() { // 重写toString()方法 方便遍历类
        return "Animal{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", sex=" + sex +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }
}

// 狗类
class Dog extends Animal{ // Dog is a animal // 继承父类属性 这里体现了继承
    private Integer DogPara; // 狗参数

    public Integer getDogPara() {
        return DogPara;
    }

    public void setDogPara(Integer dogPara) {
        DogPara = dogPara;
    }

    public void WagTail(){ // 对于小狗添加了一个新的摇尾巴的方法
        System.out.println("摇尾巴");
    }
    public Dog() {
    }
    @Override
    public void Shout(){   // 重写父类的方法 这里体现了多态
        System.out.println("汪汪汪");
    }

    @Override
    public String toString() {
        return "Dog{" +
                "DogPara=" + DogPara + " " + super.toString() +
                '}';
    }
}

// 猫类
class Cat extends Animal{
    private Integer CatPara; // 猫参数

    public Integer getCatPara() {
        return CatPara;
    }

    public void setCatPara(Integer catPara) {
        CatPara = catPara;
    }

    public void LickHair(){   // 对于小猫 添加一个舔毛的方法
        System.out.println("舔毛");
    }
    public Cat() {
    }
    @Override
    public void Shout(){ // 重写父类属性
        System.out.println("喵喵喵");
    }

    @Override
    public String toString() {  // 重写toString()方法 方便遍历类
        return "Cat{" +			// super()调用父类的toString()方法 可以简写很多。
                "CatPara=" + CatPara + " " + super.toString() +
                '}';
    }
}

宠物店类的编写

对于宠物店类,和宠物的关系,这里属于的是HAS-A法则,HAS-A法则什么意思了,比如,汽车轮胎之间的关系,轮胎属于汽车,在这个例题中的情况就是,宠物属于宠物店,这就是HAS-A法则。

/*
* Has-A法则
*
* */
// 宠物店类
class PetShop{
	// 这里体现了HAS-A法则 宠物店包含小猫,小狗这些宠物
    private ArrayList<Dog> dogs;  // 宠物店的小狗的集合
    private ArrayList<Cat> cats;  // 宠物店中小猫的集合

    public PetShop() {  // 构造方法中加上代码 随机的生成初始数据
        Random random = new Random();
        dogs = new ArrayList<>();
        cats = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
               Dog dog = new Dog();
               Cat cat = new Cat();
               dog.setName("dog" + i);
               cat.setName("cat" + i);
               dog.setPrice(random.nextDouble() * 400 + 100); // [0,1) * 400 = [0, 400) + 100 = [100, 500)
               cat.setPrice(random.nextDouble() * 400 + 100); // [0,1) * 400 = [0, 400) + 100 = [100, 500)
               dog.setSex(random.nextBoolean());
               cat.setSex(random.nextBoolean());

               dog.setDogPara(random.nextInt(1000));
               cat.setCatPara(random.nextInt(1000));

               dog.setColor(random.nextInt(1000) + ":" + random.nextInt(1000) + ":" + random.nextInt(1000));
               cat.setColor(random.nextInt(1000) + ":" + random.nextInt(1000) + ":" + random.nextInt(1000));

               dog.setAge(random.nextInt(10));
               cat.setAge(random.nextInt(10));

               dogs.add(dog);
               cats.add(cat);
        }
    }



    public void Traversal(){  // 遍历现有数据
        for (int i = 0; i < dogs.size(); i++) {
            System.out.println(dogs.get(i));
        }
        System.out.println("----------------------------------");
        Iterator<Cat> iterator2 = cats.iterator();
        while(iterator2.hasNext())
        {
            System.out.println(iterator2.next());
        }
    }

    public int getNumDog(){
        return dogs.size();
    }
    public int getNumCat(){
        return cats.size();
    }

    public ArrayList<Dog> getDogs() {
        return dogs;
    }

    public void setDogs(ArrayList<Dog> dogs) {
        this.dogs = dogs;
    }

    public ArrayList<Cat> getCats() {
        return cats;
    }

    public void setCats(ArrayList<Cat> cats) {
        this.cats = cats;
    }
}

客户类的编写

这时候我们就需要分析最后一种关系,客户宠物店之间的关系,它们之间的关系,是两个单独的个体,至于怎么联合起来,通过客户类中的Buy(PetShop petShop)行为就可以理解了。


class Custom{
    private Boolean sex;
    private Integer age;

    private String name;

    private ArrayList<Dog> dogs;
    private ArrayList<Cat> cats;

    public Custom() {
    }

    public Custom(String name) {
        this.name = name;
    }

    public boolean Buy(PetShop petShop){ // 这是客户在宠物店中购买商品的情况 
    // 因为这是一个讲解面向对象的,所以这里作者就先不补全了,示意即可
        Scanner in = new Scanner(System.in);
        System.out.println("Y/N"); // 小狗就是Y 小猫就是N
        String flag = in.nextLine().toLowerCase();
        if (flag.equals("y")){

        }
        else {

        }
        return false;
    }

    public Boolean getSex() {
        return sex;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public ArrayList<Dog> getDogs() {
        return dogs;
    }

    public void setDogs(ArrayList<Dog> dogs) {
        this.dogs = dogs;
    }

    public ArrayList<Cat> getCats() {
        return cats;
    }

    public void setCats(ArrayList<Cat> cats) {
        this.cats = cats;
    }
}

代码汇总

通过该文章的这个例题的简介,基本上就讲解完了,面向对象的基础和IS-A,HAS-A法则。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;

/*
* 讲解面向对象的三个基本特性
* IS-A法则
* HAS-A法则
* */
class Animal{
    private String name;  // 姓名
    private Double price; // 价格
    private Boolean sex; // 性别
    private String color; // 颜色 
    private Integer age; // 年龄

    public Animal() {
    }

    public void Shout(){ // 大叫
        System.out.println("大声的叫");
    }

    public String getName() {
        return name;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Boolean getSex() {
        return sex;
    }

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

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", sex=" + sex +
                ", color='" + color + '\'' +
                ", age=" + age +
                '}';
    }
}

class Dog extends Animal{ // Dog is a animal
    private Integer DogPara;

    public Integer getDogPara() {
        return DogPara;
    }

    public void setDogPara(Integer dogPara) {
        DogPara = dogPara;
    }

    public void WagTail(){
        System.out.println("摇尾巴");
    }
    public Dog() {
    }
    @Override
    public void Shout(){
        System.out.println("汪汪汪");
    }

    @Override
    public String toString() {
        return "Dog{" +
                "DogPara=" + DogPara + " " + super.toString() +
                '}';
    }
}

class Cat extends Animal{
    private Integer CatPara;

    public Integer getCatPara() {
        return CatPara;
    }

    public void setCatPara(Integer catPara) {
        CatPara = catPara;
    }

    public void LickHair(){
        System.out.println("舔毛");
    }
    public Cat() {
    }
    @Override
    public void Shout(){
        System.out.println("喵喵喵");
    }

    @Override
    public String toString() {
        return "Cat{" +
                "CatPara=" + CatPara + " " + super.toString() +
                '}';
    }
}

/*
* Has-A法则
*
* */

class PetShop{
    private ArrayList<Dog> dogs;
    private ArrayList<Cat> cats;

    public PetShop() {
        Random random = new Random();
        dogs = new ArrayList<>();
        cats = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
               Dog dog = new Dog();
               Cat cat = new Cat();
               dog.setName("dog" + i);
               cat.setName("cat" + i);
               dog.setPrice(random.nextDouble() * 400 + 100); // [0,1) * 400 = [0, 400) + 100 = [100, 500)
               cat.setPrice(random.nextDouble() * 400 + 100); // [0,1) * 400 = [0, 400) + 100 = [100, 500)
               dog.setSex(random.nextBoolean());
               cat.setSex(random.nextBoolean());

               dog.setDogPara(random.nextInt(1000));
               cat.setCatPara(random.nextInt(1000));

               dog.setColor(random.nextInt(1000) + ":" + random.nextInt(1000) + ":" + random.nextInt(1000));
               cat.setColor(random.nextInt(1000) + ":" + random.nextInt(1000) + ":" + random.nextInt(1000));

               dog.setAge(random.nextInt(10));
               cat.setAge(random.nextInt(10));

               dogs.add(dog);
               cats.add(cat);
        }
    }



    public void Traversal(){
        for (int i = 0; i < dogs.size(); i++) {
            System.out.println(dogs.get(i));
        }
        System.out.println("----------------------------------");
        Iterator<Cat> iterator2 = cats.iterator();
        while(iterator2.hasNext())
        {
            System.out.println(iterator2.next());
        }
    }

    public int getNumDog(){
        return dogs.size();
    }
    public int getNumCat(){
        return cats.size();
    }

    public ArrayList<Dog> getDogs() {
        return dogs;
    }

    public void setDogs(ArrayList<Dog> dogs) {
        this.dogs = dogs;
    }

    public ArrayList<Cat> getCats() {
        return cats;
    }

    public void setCats(ArrayList<Cat> cats) {
        this.cats = cats;
    }
}

class Custom{
    private Boolean sex;
    private Integer age;

    private String name;

    private ArrayList<Dog> dogs;
    private ArrayList<Cat> cats;

    public Custom() {
    }

    public Custom(String name) {
        this.name = name;
    }

    public boolean Buy(PetShop petShop){
        Scanner in = new Scanner(System.in);
        System.out.println("Y/N"); // 小狗就是Y 小猫就是N
        String flag = in.nextLine().toLowerCase();
        if (flag.equals("y")){

        }
        else {

        }
        return false;
    }

    public Boolean getSex() {
        return sex;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public ArrayList<Dog> getDogs() {
        return dogs;
    }

    public void setDogs(ArrayList<Dog> dogs) {
        this.dogs = dogs;
    }

    public ArrayList<Cat> getCats() {
        return cats;
    }

    public void setCats(ArrayList<Cat> cats) {
        this.cats = cats;
    }
}

public class Main {


    public static void main(String[] args) {
        PetShop petShop = new PetShop(); // 创建一个宠物店
//        petShop.Traversal();
        Custom custom = new Custom("LiHua");

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/5722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring更简单保存和获取bean对象的方法(注解)

Spring更简单保存和获取bean对象的方法前置准备将bean对象更为简单地保存到Spring容器中&#xff08;使用注解&#xff09;【使用类注解】 (是写在类前的)为什么要这么多类注解&#xff1f;类注解之间的关系使用类注解 Bean 命名规则使用方法注解&#xff08;Bean&#xff09;不…

[MySQL]数据库的约束与表的设计

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 文章目录 1.数据库约束 1.1 约束类型 1.2 null 约束 1.…

Redis面试题

目录 面试题&#xff1a;谈谈你对Redis的理解&#xff1f; 面试题&#xff1a;Redis的基本数据类型 Redis的基本数据类型以及它们的应用场景&#xff1a; 面试题&#xff1a;redis内存淘汰机制 面试题&#xff1a;Redis持久化机制 RDB AOF 面试题&#xff1a;Redis写时复…

相似度系列-3:传统方法ROUGE ROUGE: A Package for Automatic Evaluation of Summaries

文章目录ROUGE: A Package for Automatic Evaluation of Summariesintroduction基础模型Rouge-NRouge_NmultiROUGE-L: Longest Common Subs equence1**Sentence-level LCS**2**Summary-Level LCS**ROUGE-W: Weighted Longest Common SubsequenceROUGE-S: Skip-Bigram Co-Occurr…

Python小总结

Python小总结一、open&#xff08;一&#xff09;open的定义&#xff1a;open是Python的内置函数&#xff0c;一般用于本地文件的读写操作。&#xff08;二&#xff09;open例子&#xff1a;二、with open&#xff08;一&#xff09;用途&#xff1a;with open是Python用来打开…

04 数学软件与建模---最优化模型

一、优化模型的数学描述 二、优化模型的分类 1.根据是否存在约束条件 有约束问题和无约束问题。 2.根据设计变量的性质 静态问题和动态问题。 3.根据目标函数和约束条件表达式的性质 线性规划&#xff0c;非线性规划&#xff0c;二…

PiL测试实战(上)| 模型生成代码的单元级PiL测试

前言 对于嵌入式代码&#xff0c;为了测试软件能否在目标芯片上实现预期的功能&#xff0c;通常需要进行PiL测试&#xff08;Processor-in-the-Loop-Testing&#xff09;。 目前市面上较为常见的嵌入式软件调试工具有PLS UDE和LAUTERBACH Trace32等。UDE和Trace32可以很好的完…

通俗易懂话GC-C#的内存管理

昨天和一个朋友聊到图像处理软件内存占用多的问题&#xff0c;然后很自然聊到了GC&#xff0c;回想起以往很初学者都问到类似的问题&#xff1a; 1、C#自己就会垃圾回收&#xff0c;为什么我还要关心垃圾回收&#xff1f; 2、GC可以回收垃圾&#xff0c;但回收的时候又会让线…

js深浅拷贝:保证赋值后改变第二个变量的值,不影响第一个变量的值

对于基本数据来说&#xff0c;将一个变量赋值给另一个变量&#xff0c;第二个变量值改变了&#xff0c;不会影响第一个变量&#xff1b;但对于复杂类型中的对象来讲&#xff0c;将一个对象赋值给另外一个对象&#xff0c;其实是将放对象内容的地址赋值给了第二个对象&#xff0…

Amazon EKS绑定alb 使用aws-load-balancer-controller(Ingress Controller)对外提供服务

1、创建AWS Load Balancer Controller 的 IAM 策略 亚马逊相关文档 下载地址 打开 策略 点击 创建策略 打开 IAM_Policy.json 复制内容粘贴到 json 点击下一步:标签 然后一直下一步 在下图中名称填写 AWSLoadBalancerControllerIAMPolicy 你也可以自定义名称。然后创建策略。…

尚医通_第11章_医院排班管理和搭建用户系统环境

尚医通_第11章_医院排班管理和搭建用户系统环境 文章目录尚医通_第11章_医院排班管理和搭建用户系统环境第一节、-医院排班管理需求分析一、医院排班管理需求1、页面效果2、接口分析第二节、医院排班管理-科室列表一、科室列表&#xff08;接口&#xff09;1、添加service接口和…

李峋同款爱心代码

李峋爱心代码背景代码运行pycharm打包成exe程序背景 最近大火的电视剧《点燃我温暖你》出现&#xff0c;令我的家庭地位进一步下降&#xff0c;因为男主“李峋”已经变成了她的大老公&#xff0c;而我就被打入冷宫. 为了满足她的“攀比心”&#xff0c;我连夜给她实现了粉红色爱…

第十节:多态【java】

目录 &#x1f340;1.多态 &#x1f4d6;1.1 多态的概念 &#x1f4d2;1.2 多态实现条件 &#x1f446;1.2.1向上转型 &#x1f4af;1.2.2重写 &#x1f531;1.2.3动态绑定和静态绑定 &#x1f308;1.2.4多态的应用 &#x1f447;1.2.5向下转型 &#x1f4d5;1.3多态的…

Java岗面试核心NIO有关知识总结

这篇文章主要是阅读了一些关于NIO的文章&#xff0c;对一些重要的部分进行了摘取总结。BIO、NIO、AIO的不同 BIO&#xff1a;同步阻塞IO模式&#xff0c;线程发起IO请求后&#xff0c;一直阻塞IO&#xff0c;直到缓冲区数据就绪后&#xff0c;再进行下一步操作。NIO&#xff1a…

SpringCloud基础知识【Hystrix熔断器】

SpringCloud基础知识【Hystrix熔断器】1. Hystrix概述2. Hystix-隔离2.1 线程池隔离2.2 信号量隔离2.3 Hystix隔离小结3. Hystix-降级3.1 服务提供方降级3.2 消费方降级3.3 Hystix降级小结4. Hystix-熔断4.1 代码演示4.1 熔断监控5. Hystix-限流1. Hystrix概述 Hystix&#xf…

基于概率距离削减法、蒙特卡洛削减法的风光场景不确定性削减(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一文带你吃透数据库的约束,不做CRUD程序员

在SQL标准中&#xff0c;一共规定了6种不同的约束&#xff0c;包括非空约束&#xff0c;唯一约束和检查约束等&#xff0c;而在MySQL中是不支持检查约束的&#xff0c;所以这篇文章先对其余5种约束做一个详解和练习。 文章目录1. 约束的概念2. 约束的分类3. 非空约束4. 唯一约束…

.net 大型物流综合管理网络平台源码【免费分享】

淘源码&#xff1a;国内专业的免费源码下载平台 源码分享&#xff0c;需要源码学习可私信我&#xff01; 一、源码描述 这是一款大型的物流综合管理网络平台源码&#xff0c;十分完整实用&#xff0c;便于调试&#xff0c;涵盖了物流综合管理的全面内容&#xff0c;该源码运行比…

单商户商城系统功能拆解30—营销中心—积分签到

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

【负荷预测】基于改进灰狼算法(IGWO)优化的LSSVM进行负荷预测(Matlab代码实现)

&#x1f4dd;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;…