|关键词:|接口|内部类|
内部类:成员内部类、局部内部类、静态内部类、匿名内部类
成员内部类:该类依附与外部类而存在,可无条件访问外部类的全部成员属性和成员方法
局部内部类:定义在一个做用域或方法中的类,访问权限仅做用在该域和方法中
静态内部类:不依赖与外部类,不能使用外部类的非静态的变量或方法
匿名内部类:为解决临时继承某个类或操做某个接口时创建实例的需求
注意: 再过几回课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化较大的地方的是输入与输出部分。编码的时候,请不要将处理输入(System.in)与输出(System.out)的代码与某个业务处理方法绑死。
参考资料:javascript
成员 | 负责任务 | 博客地址 |
---|---|---|
陈锦霞 | 商品 | https://www.cnblogs.com/chenjinxia456/ |
钟其均 | 购物车 | https://www.cnblogs.com/zhongqijun2468/ |
class Cart{//购物车类 ArrayList<Commodity> shoppinglist = new ArrayList<>(); private double Totalprice=0; private int num=0; public boolean addCommodity(Commodity commodity,int num){// if(shoppinglist.add(commodity)) num++; return true; } public double getTotalprice(){//商品总价格 for(int i;i<num;i++){ Totalprice += shoppinglist.get(i).getNum() * shoppinglist.get(i).getPrice(); } return Totalprice; } public boolean DeleteCommodity(Commodity commodity) {//删除商品 if(shoppinglist.contains(commodity)) { shoppinglist.remove(commodity); return true; } else return false; } public void ClearCart(){//清空购物车 shoppinglist.clear(); } } public class Main5{ private static Object commodity; public static void main(String[] args) { Scanner in = new Scanner(System.in); Cart cart = new Cart(); int choice=0; Commodity flag=null; Commodity[] commodity = new Commodity[2]; commodity[0]=new Commodity("机械键盘",598,1); commodity[1]=new Commodity("java课本",89,1); for(int j = 0; j < 10; j++){ choice = welcome(); if(choice == 0) break; Scanner sc; switch(choice){ case 1 : menu1(commodity); System.out.print("选择:"); String Name = sc.next(); System.out.println(flag = search1(Name, commodity)); System.out.println(); break; case 2 : System.out.println("所选商品为: “" + flag + "”"); System.out.print("加入数量:"); int num = sc.nextInt(); flag.setNum(num); cart.addCommodity(flag, num); System.out.println("加入成功!"); System.out.println(); break; case 3: System.out.println(cart); System.out.println("总价: " + cart.getTotalprice()); System.out.println(); } } } public static int welcome(){ Scanner sc = new Scanner(System.in); System.out.println("********欢迎光临********"); System.out.println("******1.查找商品*******"); System.out.println("******2.添加商品*******"); System.out.println("******3.去购物车*******"); System.out.println("******0.退出系统*******"); System.out.print("choice = "); int choice = sc.nextInt(); return choice; } public static void menu1(Commodity[] commodity){ for(Commodity i : commodity){ System.out.println(i); } } public static Commodity search1(String Name, Commodity[] product){ for(Commodity i :product){ if(i.getName().equals(Name)) return i; } return null; } }
跟上次比起来就多了一个搜索的功能,而后把登陆类改为了方法,提供登陆操做的应该是商城。有待改进: 用户进行注册后,拥有了其购物车,如今没法对用户的钱包进行查看和修改,缺乏图形界面
改造前:与控制进行了捆绑,若用户想要操做则必须在控制台下
改造后:脱离了控制台,使得程序更有广泛性能够用于不一样环境
当一个方法没有具体的实现定义,即没有方法体只有方法名时,这时方法很抽象,就须要用abstract
当须要在多种界面时运行或者输入输出,就能够把方法抽象化
变化的是数据的输出输入的方式,改造前只能从控制台输入输出,改造后还能够从对话框之类的界面输入输出
不变的是这个游戏的功能,依旧是猜数字
Comparable接口一个compareTo方法,能够用来对实现他的每一个类的对象进行总体排序,当使用Arrays.sort时,会调用compareTo()方法,则能够对该类型进行排序
Comparable接口一个compareTo方法,能够用来对实现他的每一个类的对象进行总体排序,当使用Arrays.sort时,会调用compareTo()方法,则能够对该类型进行排序
Comparable:只能以固定的形式进行排序 而Comparator:可根据须要建立多种排序方式
Rectangle,Cirlce都 IS Shape,都要进行求周长和求面积的计算,,这些是他们共有的行为,但这些行为在Rectangle,Cirlce中的具体实现又不同,这时咱们须要把这些行为抽离出来造成一份共有的协议。
在Shape上实现Comparable接口比较好,由于是多态只给出关键代码:
面向Comparable接口编程,它的实现类只须要对该接口的compareTo方法重写,就能够实现咱们要的功能
在题目3中要对两种图形进行排序,父类Shape实现接口,就能够重写compareTo方法和使用ArrayList.sort排序java
提供了三个抽象的方法,分别是writeStudent()、readStudent()和diplayAllStudent(),分别用来写入学生信息,读取学生信息和展现全部学生的信息
private List<Student> students = new ArrayList<Student>();
是StudenDaoListImpl中的语句,可看出StudenDaoListImpl使用ArrayList来存放学生的信息,而StudentDaoArrayImpl是利用数组来存放学生的信息。查看ArrayList的源代码发现实际上ArrayList又是利用数组实现的编程
接口也是定义了一个协议,跟继承不一样的是,实现接口的条件是知足HAS-A便可。接口中的方法都是抽象的,要在其实现类中去具体的实现,不一样的类可能具体实现的细节不一样,是更加面向对象的一种体现。
⑴ 面向接口编程可使得全部实现接口的对象都拥有共同的行为,使代码与接口相关联,而不须要考虑具体的实现类。数组
好处:面向接口编程能够将接口与实现相分离,从而大大提升程序的灵活性。
周次 | 总行数 | 新增行数 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 73 | 73 | 3 | 3 |
2 | 468 | 468 | 91 | 9 |
3 | 411 | 411 | 27 | 9 |
4 | 503 | 503 | 42 | 13 |
5 | 608 | 608 | 25 | 22 |