17.面向对象高级(05)本季要点:抽象类和接口的实际应用。本季作为上一讲的后续内容,详细讲解了Java中的抽象类和接口的使用,并讲解了工厂设计模式。blog:[零基础学JAVA]JavaSE面向对象部分-17.面向对象高级(05)2009-02-07上季内容回顾:1、对象的多态性2、抽象类和接口本季主要知识点:抽象类和接口的实际应用1、子类对象可以为父类对象实例化,之后调用的方法都是子类中已经被覆写过的方法。2、就可以利用此特性,观察抽象类的使用,因为在抽象类中有很多的抽象方法。抽象类abstractclassA{publicabstractvoidfun();};classBextendsA{publicvoidfun(){System.out.println(B==HelloWorld);}};classCextendsA{publicvoidfun(){System.out.println(C==HelloWorld);}};publicclassDemo01{publicstaticvoidmain(Stringargs[]){Aa=newB();a.fun();}};abstractclassA{publicabstractvoidfun();};classBextendsA{publicvoidfun(){System.out.println(B==HelloWorld);}};classCextendsA{publicvoidfun(){System.out.println(C==HelloWorld);}};publicclassDemo01{publicstaticvoidmain(Stringargs[]){Aa=newC();a.fun();}};抽象类是可以实例化的,通过对象的多态性来实例化抽象类的主要作用是什么呢?抽象类就是类似于一个模板操作==JAVAWEBServlet程序,提供的就是一个模板。把上面的实际的例子变为程序abstractclassErr{publicvoidprintInfo(){System.out.println(姓名:+this.getName());System.out.println(班级:+this.getCls());System.out.println(事由:+this.getCau());}//得到姓名,由具体的子类去做publicabstractStringgetName();//得到班级,由具体的子类去做publicabstractStringgetCls();//得到事由publicabstractStringgetCau();}classZhangSanextendsErr{publicStringgetName(){return张三;}publicStringgetCls(){return小五班;}publicStringgetCau(){return因为上课吃东西,所以被老师抓住了,所以要填写违纪卡。;}}classLiSiextendsErr{publicStringgetName(){return李四;}publicStringgetCls(){return大五班;}publicStringgetCau(){return因为上课睡觉,所以被老师抓住了,所以要填写违纪卡。;}}publicclassDemo02{publicstaticvoidmain(Stringargs[]){Erre=newZhangSan();e.printInfo();}}我们改成李四看看效果哈~abstractclassErr{publicvoidprintInfo(){System.out.println(姓名:+this.getName());System.out.println(班级:+this.getCls());System.out.println(事由:+this.getCau());}//得到姓名,由具体的子类去做publicabstractStringgetName();//得到班级,由具体的子类去做publicabstractStringgetCls();//得到事由publicabstractStringgetCau();}classZhangSanextendsErr{publicStringgetName(){return张三;}publicStringgetCls(){return小五班;}publicStringgetCau(){return因为上课吃东西,所以被老师抓住了,所以要填写违纪卡。;}}classLiSiextendsErr{publicStringgetName(){return李四;}publicStringgetCls(){return大五班;}publicStringgetCau(){return因为上课睡觉,所以被老师抓住了,所以要填写违纪卡。;}}publicclassDemo02{publicstaticvoidmain(Stringargs[]){Erre=newLiSi();e.printInfo();}}调用模板成功了哈~(模板设计)场景:假设Person分为Worker和Student,工人的属性包括:姓名、年龄、工资,学生的属性包括:姓名、年龄、成绩,那么现在人都可以说话,但是工人和学生说的话肯定不一样。此时,肯定人中的说话方法是固定的,肯定是一个普通方法,只是说话的内容不一样。abstractclassPerson{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}publicvoidtalk(){//这是要说,内容都在此方法中System.out.println(this.getContent());}publicabstractStringgetContent();}classStudentextendsPerson{privatefloatscore;publicStudent(Stringname,intage,floatscore){super(name,age);this.score=score;}publicStringgetContent(){return学生说--姓名=+super.getName()+,年龄=+super.getAge()+,成绩=+this.score;}}classWorkerextendsPerson{privatefloatsalary;publicWorker(Stringname,intage,floatsalary){super(name,age);this.salary=salary;}publicStringgetContent(){return工人说--姓名=+super.getName()+,年龄=+super.getAge()+,工资=+this.salary;}}publicclassDemo03{publicstaticvoidmain(Stringargs[]){Personp1=newStudent(张三,20,90.0f);Personp2=newWorker(李四,30,900.0f);p1.talk();p2.talk();}}接口的实际应用分布式代码中最重要的就是要规定好操作的接口。接口就是定义了一个标准,只要按照此标准代码都可以正常使用。interfaceA{publicStringgetInfo();}classBimplementsA{publicStringgetInfo(){returnB--HelloWorld;}}classCimplementsA{publicStringgetInfo(){returnC--HelloWorld;}}publicclassDemo04{publicstaticvoidmain(Stringargs[]){Aa=newB();System.out.println(a.getInfo());}}证明接口对象可以实例化,通过对象多态性进行向上转型,接口是可以实例化的。我们改成C看看效果interfaceA{publicStringgetInfo();}classBimplementsA{publicStringgetInfo(){returnB--HelloWorld;}}classCimplementsA{publicStringgetInfo(){returnC--HelloWorld;}}publicclassDemo04{publicstaticvoidmain(Stringargs[]){Aa=newC();System.out.println(a.getInfo());}}我们发现都可以利用对象多态性完成操作接口是一个标准。USB接口--只要是实现了USB接口的设备就都可以向USB接口上插。举例:假设现在设计一个USB接口,里面只有开始工作和停止工作的操作。主板上有USB接口,表示可以插入任意的USB设备。interfaceUSB{//表示开始工作publicvoidstart();//表示停止工作publicvoidstop();}classMainBoard{//只要是USB设备就可以插publicstaticvoidplugIn(USBusb){usb.start();usb.stop();}}classMP3implementsUSB{publicvoidstart(){System.out.println(MP3开始工作);}publicvoidstop(){System.out.println(MP3停止工作);}}classPrintimplementsUSB{publicvoidstart(){System.out.println(打印机开始工作);}publicvoidstop(){System.out.println(打印机停止工作);}}publicclassDemo05{publicstaticvoidmain(Stringargs[]){USBu=newMP3();MainBoard.plugIn(u);}}现在看下效果如果是打印机呢?interfaceUSB{//表示开始工作publicvoidstart();//表示停止工作publicvoidstop();}classMainBoard{//只要是USB设备就可以插publicstaticvoidplugIn(USBusb){usb.start();usb.stop();}}classMP3implementsUSB{publicvoidstart(){System.out.println(MP3开始工作);}publicvoidstop(){System.out.println(MP3停止工作);}}classPrintimplementsUSB{publicvoidstart(){System.out.println(打印机开始工作);}publicvoidstop(){System.out.println(打印机停止工作);}}publicclassDemo05{publicstaticvoidmain(Stringargs[]){USBu=newPrint();MainBoard.plugIn(u);}}这就是一个典型的操作,一切以接口标准进行操作。接口规定什么,其就可以完成什么样的工作哈~举例:听我讲课,听我讲课,我说的是中文,你听的是中文,所以你能听懂,如果你再说话,你肯定也说中文,我听的也是中文。接口在实际中可以作为一种标准,那么这种标准在使用的时候就可以让类之间