【java】面向对象

阅读: 评论:0

【java】面向对象

【java】面向对象

先找对象,设计类,然后在考虑流程

1.核心需求
用户分为两类:管理员,普通用户
管理员:
a)查阅书籍信息
b)增加书籍
c)删除书籍
d)查看所有书籍列表
e)退出程序

普通用户
a)查阅某个书籍的信息
b)借阅书籍
c)归还书籍
d)退出程序

2.由上面需求可以看出:有四个类:管理员、用户、书籍、书籍列表
所以先创建四个类:Admin,NormalUser,Book,BookList(红色标记)


还有7中操作:(蓝色标记),把这几个操作放入一个包(查询,增加)

3.丰富每个类的内容
接下来我们涉及用户操作,我们发现,每个操作可以写成一个类,在每个操作类中写一个work方法,方法参数是BookList,返回是void

既然这些操作都有一个特共性的方法work(),可以把他提取出来,做成一个接口,让其他操作类实现接口,重写接口的抽象方法。

package BookSystem.Operation;import BookSystem.BookList;public interface IOperation {public void work(BookList bookList);
}

当前IOperation这个接口把所有的用户统一规范起来,啥样的类可以作为一种用户操作?只要实现了IOperation接口。

package BookSystem.Operation;import BookSystem.BookList;public class AddOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("新增书籍");}}
  • 提出接口或者父类,目的是为了把公共部分提取出来,也为了我让看起来不相关的类操作(AddOperation,DelOperation),能够关联起来,于是把不同类的实例放在一个数组中,方便用户控制权限。
    Admin(管理员类)
package BookSystem;import BookSystem.Operation.*;public class Admin {public String name;//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例public IOperation[] operations;//构造方法public Admin(String name) {this.name = name;//把不同类的实例放在一个数组里this.operations = new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}
}

普通类(NormalUser)

package BookSystem;import BookSystem.Operation.*;public class NormalUser {public String name;public IOperation[] operations;//构造方法public NormalUser(String name) {this.name = name;this.operations = new IOperation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()};}
}

由于Admin和NormalUser中有共同的属性和方法,此时可以写一个User,让上面两个类继承

import BookSystem.operation.IOperation;//用来作为Admin和NormalUser的父类
//存放两种类的公共信息
//User类不应该被实例化,存在的目的是被继承,所以做成抽象类,防止不小心对User实例化
abstract public class User {public String name;public IOperation[] operations;}
}
public class Admin extends User {//创建构造方法public Admin(String name){//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例this.name=name;this.operations= new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}}
package BookSystem;import BookSystem.Operation.*;import java.util.Scanner;public class NormalUser extends User{//构造方法public NormalUser(String name) {this.name = name;this.operations = new IOperation[]{new FindOperation(),new BorrowOperation(),new ReturnOperation(),new ExitOperation()};}}

什么时候用继承,是么时候用接口

如果多个类之间,公共部分只有方法,此时用接口
如果多各类之间,公共部分不光有方法,还有属性,此时用继承

  • 在User创建一个抽象方法菜单,其他两种用户继承他
package BookSystem;import BookSystem.Operation.*;abstract public class User {public String name;public IOperation[] operations;public abstract  int menu();}
ackage BookSystem;import BookSystem.operation.*;import java.util.Scanner;public class Admin extends User{//创建构造方法public Admin(String name){//管理员能支持的操作,看起来是一个接口数组,实际上接口不能实例化//这个数组中的内容,指的是实现接口的实例this.name=name;this.operations= new IOperation[]{new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),new ExitOperation()};}@Overridepublic int menu() {System.out.println("==========");System.out.println("Hello!"+name+"欢迎你");System.out.println("1.查阅图书信息");System.out.println("2.新增书籍信息");System.out.println("3.删除书籍信息");System

本文发布于:2024-01-29 04:14:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170647286512618.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:吴恩达
标签:面向对象   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23