类定义(课下选做)

一、设计思路

  • 之前在课上做过类似的题目,首先分析,这个题的重点在重写toString类和equals类
  • 首先,是toString类,直接重写public String toString(){return 字符串;}返回要输出的字符串即可
  • 然后是equals类
    • public boolean equals(Object o){内容}重写
    • 先用if(this==o)判断地址是否相同,若相同直接true
    • 再用if(o==null)判断对象是否为空```
    • 接着用if (getClass()!=o.getClass())判断对象类型是否相等
    • 最后判断成员变量是否相等
    • 为提高程序效率,应重写hasCode方法

二、代码

Book.java

public class Book {
    String name;
    String auther;
    String publish;
    String date;
    Book(){}
    Book(String name){}
    Book(String auther,String publish,String date){}
    Book(String name,String auther,String publish,String date){
        this.name=name;
        this.auther=auther;
        this.publish=publish;
        this.date=date;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public void setAuther(String auther){
        this.auther=auther;
    }
    public String getAuther(){
        return auther;
    }
    public void setPublish(String publish){
        this.publish=publish;
    }
    public String getPublish(){
        return publish;
    }
    public void setDate(String date){
        this.date=date;
    }
    public String getDate(){
        return date;
    }
    public String toString(){                  //重写toString类
        return "书名:"+name+",作者:"+auther+",出版社:"+publish+",出版日期:"+date;
    }
    public boolean equals(Object o){
        if (this==o)        //判断地址是否相等,若相等,直接返回true
            return true;
        if (o==null)         //判断对象是否为空
            return false;
        if (getClass()!=o.getClass())    //判断对象类型是否相等
            return false;
        Book book=(Book)o;         //向下转型,判断成员变量是否相等
        if (book.name==this.name&&book.auther==this.auther&&book.publish==this.publish&&book.date==this.date)
            return true;
        else
            return false;
    }
        public int hashCode() {                 //重写hasCode类,提高程序效率
        int result = name.hashCode();
        result = 31 * result + auther.hashCode();
        result = 31 * result + publish.hashCode();
        result = 31 * result + date.hashCode();
        return result;
    }
}

bookShelf.java

public class bookShelf {
    public static void main(String[] args){
        Book b0 = new Book("Java","耿祥义","清华大学出版社","2017.9");
        Book b1 = new Book("汇编语言与程序设计","钱晓捷","电子工业出版社","2018.6");
        Book b2 = new Book("计算机网络","谢希仁","电子工业出版社","2017.1");
        System.out.println(b0.toString());
        System.out.println(b1.toString());
        System.out.println(b2.toString());
        System.out.println(b0.getName());
        System.out.println(b1.getAuther());
        System.out.println(b2.getDate());
        System.out.println(b0.equals(b1));
        System.out.println(b2.equals(b2));
    }
}

三、运行结果截图

四、码云代码链接

五、参考资料

原文地址:https://www.cnblogs.com/wyf20175217/p/10661292.html

时间: 2024-08-30 17:33:35

类定义(课下选做)的相关文章

20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义

20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然后在验证通过后再取出. 2.在Book.java中储存测试类中输入的数据,然后验证信息是否一样,一样则输出,否则就返回false. 测试代码 Bookself.java public class Bookself { public static void main(String[] args) { Book

类定义(课下选做)

类定义(课下选做) 要求 Book类包含书名,作者,出版社和出版日期 数据都要定义getter和setter 至少三个构造方法,接收并初始化这些数据 覆盖toString方法,返回良好的含有多行的书的描述信息 覆盖equals方法,书名.作者.出版社和出版日期完全相同说明两本书相同. 创建一个测试类BookShelf 思路 根据要求最好分为两个类,即Book和BookShelf 在Book类中定义四个getter,返回书名.作者.出版社和出版日期 在BookShelf类中定义四个setter,赋

类定义(课下选做) 20175213

一.题目要求 1.设计并实现一个Book类,定义成Book.java,Book 包含书名,作者,出版社和出版日期. 2.数据都要定义getter和setter. 3.定义三个构造方法,接收并初始化这些数据. 4.覆盖(Overeide)toString方法,返回良好的含有多行的书的描述信息. 5.覆盖equals方法,书名,作者,出版社和出版日期完全一致才说明两本书一样的. 二.设计思路 1.类是把同类事物的共同特征和行为封装在一起的结构体,事物的特征称为属性,事物的行为称为方法,类是抽象的概念

20165235 第十周课下补做

20165235 祁瑛 第十周课下补做 相关知识点的总结 LinkedList<String> mylist=new LinkedList<String>()来创建一个链表. mylist.add();来添加结点. get(int index)来获取链表中第index个位置的结点的对象. public static sort(List<E>)将链表中的元素升序排列 public static binarySearch(List<T>,T key,Compar

20165322 第十周课下补做

第十周课下补做 课程知识点总结 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法: Comparable:"可比较的",(欲参与比较的对象对应的元素类需实现Comparable接口) 使用这种策略来比较时,两个对象(这里两个对象是指一个类的两个不同实例)本身必须是"可比较的",比较的标准由对象所在的类来定义,这种可比较的能力是对象本身固有的,因此不需要第三方参与就可以完成比较.要使得两个对象本身是可比较的,那么对象所在的类必须实现Compa

20165308 2017-2018-2 第十周课下补做

20165308 2017-2018-2 第十周课下补做 一.教材十五章代码分析 代码分析有的是以注释的形式写出,对整个代码的理解是写在前面的 1.p442-443 Example15_1.java Cone.java 此类不关心怎么样计算面积,计算面积由后面的类完成,只需调用即可,只关心计算体积. public class Cone<E> { double height; E bottom; //用泛型类E声明对象bottom public Cone(E b) { //参数b是泛型类型 bo

20165315 第四次考试课下补做

20165315 第四次考试课下补做 一.相关知识点的总结 泛型 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>",而且必须要用具体的类型替换"<>"中的泛型 链表

20165315 第二次考试课下补做

20165315 第二次考试课下补做 课上内容的补做,结果截图 参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值, 提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java Sumo

20165311 第一次考试课下补做

第一个测试: 第二个测试: 第三个测试: 知识点: 第一个测试 源代码名称随着public类名称的改变而改变 第二个测试 打包文件时,需要先在总目录中输入javac -d bin *.java,再输入java -cp .:bin packagename.*,在bin目录中的字节码运行出结果即可 第三个测试 源文件的名称与public类名称相同 运行时应运行主类所在的文件名称 Java语言中区分大小写 写java命令不能携带扩展名和目录 测试未完成原因:虚拟机一开始没有安装jdk 课下发现可以用g