通过在一个类中创建不同类的对象,在用对象使用方法就能实现对象的交互
通过在一个类中创建不同类的对象在用对象使用方法就能实现对象的交互
一般一个文件一个类
Book和BookList关系
Book[]books相当于一个引用数组 里面存放多个Book对象
自定义类数组中存放的都是自定义类对象
当遇到不确定数组元素有哪些时可以直接给个值,初始化前面一部分,后面不初始化
10本书,先放三本
BookList可以操作一本书,Book操作一本书内的元素
每一个Book类创建的对象在堆上存放了Book类所有成员,打印一本书就直接使用某个引用
修饰符总结
类:
public 默认修饰符 final abstract static
不同的类要互相使用创建对象时需要导包,没有被public修饰的类不能在其他包中使用
默认修饰符表示default的范围只能在同一个包中使用,抽象类无法实例化
方法:
public 默认修饰符 protected private static final abstract
成员变量:
public 默认修饰符 protected private static final
接口:
abstract public
static和final修饰的方法不能被重写
private修饰的方法也不能被重写
因此接口、抽象类不能被static final private修饰没意义所以不能被它们修饰
父类和子类的继承
当两个类(管理员、普通会员)有共同的成员变量需要赋不同的值,可以让这两个类继承相同的父类,
父类中定义这个变量。
子类是将父类的所有成员继承下来在堆上有单独的空间,
所以相同父类的不同子类在给继承下来的父类成员赋值时是相互不影响的
实际上“Java中子类可以继承父类所有的属性和方法”,
只不过因为私有的原因,子类不能调用父类的私有成员private
因此如果子类要使用父类的成员,该成员不能用private修饰
在子类中修改继承下来的父类成员,子类只与他的父类绑定
一个方法中出现this,就一定是这个方法存在的类中的对象或者他的子类,不用过于纠结
子类访问抽象父类的成员
向上转型只能用父类的成员(通过动态绑定才能用子类)
抽象父类是被abstract修饰的不能直接实例化来直接使用父类成员,
必须通过创建一个子类对象在用一个抽象父类引用来接收,这样父类引用才能间接使用自己的成员
抽象父类的普通成员和普通方法,在子类堆上有一块空间,可以在子类直接使用 子类之间互不影响。
如果要在非子类中使用抽象父类的成员,上一条有解释,需要向上转型后就能使用。
- [ ] 先确定实现功能需要操作书和书架的哪些内容在确定书和书架的成员变量和方法,还有使用者的菜单和成员变量
- [ ] 创建一个书的类描述书的内容,方法:打印书的内容,获取,修改书的内容,初始化书的内容
- [ ] 创建一个书架(只能放10本),(书类来创建一个数组)先放入三本书(初始化书架)记录书架上有几本书,
方法:获取书架上的一本书,获取书架上书的个数,修改书架上书的个数,往书架上放一本书
- [ ] main函数中判断是哪个用户后再去调用某个类(创建对象再调用方法)
- [ ] 创建一个抽象类,写使用者的共同点和抽象方法,
- [ ] 根据不同的使用者创建不同的类一起继承抽象类,
方法1:分别创建一个接口数组存放了菜单上的类
方法2:打印不同的菜单,获取一个数字来确定使用数组上哪一个元素(哪个类)new 类 ,对象调用方法work;
- [ ] 写一个接口创建一个work抽象方法 参数是书架
- [ ] 实现每个类 参数书架
Find 查找 (输入字符串,根据这个字符串查找书架上有没有符合的)就需要从书架上获取一本书,在获取书架上书的个数,每一本书判断name是不是和输入的相同
Add 新增图书:输入书籍所有基本信息后,创建一个book对象放入基本信息(Book只是一个临时的,BookList相当于存放Book资料),在使用往书架上放书的方法,修改书架个数
Del 删除图书:输入字符串,判断哪一个和这个字符串相等后,if(equals)获取此时的i把这个BookList对象的i后面的往前覆盖
Display 显示书:获取书架书的个数,for循环打印数组(注意要重写toString,要不然打印的只是哈希值)
Exit退出
————————
Find 查找
Borrow 借阅图书(获取一个字符串,调用获取书架上的一本书方法equals找到符合的字符串后修改成员变量为true)
Return 归还 改为false就行
Exit退出