您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 03 java接口与内部类
147第3章接口与内部类接口是什么?接口有什么作用?如何使用接口?这些都是本章需要解决的问题。本章将详细地讲述接口的概念,并以实战结合的方式,学习这些抽象概念。本章还会介绍内部类的相关知识,包括内部类的种类和内部类的使用环境等等。3.1接口接口同继承、多态一样,都是Java程序语言的特色。它贯穿了整个Java程序开发,是对继承的很好补充,其原因下面会详细的讲述。3.1.1接口概念的引入为什么在买USB电脑鼠标的时候,不需要问电脑配件的商家,USB鼠标是什么型号的?也不需要询问是满足什么要求?原因就是USB接口是统一的、固定不变的一种型号,是一种规范。所有的厂家都会按照这个规范,来制造USB接口的鼠标。这个规范说明制作该USB类型的鼠标应该做些什么,但并不说明如何做。而Java程序设计中的接口,也是一种规范。这个接口定义了类应该做什么?但不关心如何做?即接口中只有方法名,没有方法体。3.1.2接口的概念从专业的角度讲,接口只是说明类应该做什么,但并不指定应该如何去做。在实际开发过程中,通过类来实现接口。接口只有方法名没有方法体,实现接口就是让其既有方法名又有方法体。下面就举个有关接口的模型。接口{应该作的事情一{............}应该作的事情二{............}应该作的事情三{............}}这个例子只是声明了要做什么事情,但没有说明如何做,需要一个类去实现它,将它的方法体完善。1483.1.3接口的声明接口的声明很简单,使用关键字“Interface”来声明。接口的形式跟类很相似,但要记住接口是接口,类是类,两者不能混为一谈。接口是要求类如何做的一套规范。下面将举一个实例,来演示如何声明接口。///创建一个学校的接口///在这个接口中,创建了很多个方法,并且这些方法没有方法体publicinterfaceschool{voidsetschoolname();voidsetclassname();voidsetstudentname();voidsetstudentcode();voidsetstudentsexy();voidsetstudentbirthday();voidsetfamilyaddress();Stringgetschoolname();Stringgetclassname();Stringgetstudentname();Stringgetstudentcode();Stringgetstudentsexy();Stringgetstudentbirthday();Stringgetfamilyaddress();}上面的实例,演示了如何声明一个接口,可以看出整个接口中,只有几个设置器和访问器的方法名称,并没有真正实现方法。另外还有一点,接口的声明必须是“Public”的,否则没有任何意义。3.1.4接口的实现接口的用处就是让类通过实现它,来执行一定的功能。下面通过实例演示接口的实现功能,在看实例之前,先看看这个实例的流程,如图3.1所示。教师类teacher主运行程序教师对象te2教师对象te1学生对象st1输出输出输出学校接口school实现这个接口实现这个接口学生对象st2输出学生类student图3.1有关接口的一个实例首先看看学校接口的设计。///声明一个学校接口,来告诉程序需要做些什么149///其中包括了很多方法。但是都没有去实现。即都没有函数体interfaceschool{voidsetschoolname(Stringschoolname);voidsetclassname(Stringschoolclassname);voidsetname(Stringname);voidsetcode(Stringcode);voidsetsexy(Stringsexy);voidsetbirthday(Stringbirthday);voidsetfamilyaddress(Stringfamilyaddress);Stringgetschoolname();Stringgetclassname();Stringgetname();Stringgetcode();Stringgetsexy();Stringgetbirthday();Stringgetfamilyaddress();}下面再来设计学生类,其代码如下:///创建一个类,让它实现学校这个接口///通过设置器来设置各个参数///通过访问器来获得对象的参数///通过tostring方法来让对象以字符串形式输出。classstudentimplementsschool{privateStringschoolname;privateStringclassname;privateStringstudentname;privateStringstudentcode;privateStringstudentsexy;privateStringstudentbirthday;privateStringfamilyaddress;publicvoidsetschoolname(Stringschoolname){this.schoolname=schoolname;}publicvoidsetclassname(Stringclassname){this.classname=classname;}publicvoidsetname(Stringstudentname){this.studentname=studentname;}publicvoidsetcode(Stringstudentcode){this.studentcode=studentcode;}publicvoidsetsexy(Stringstudentsexy){this.studentsexy=studentsexy;}publicvoidsetbirthday(Stringstudentbirthday)150{this.studentbirthday=studentbirthday;}publicvoidsetfamilyaddress(Stringfamilyaddress){this.familyaddress=familyaddress;}publicStringgetschoolname(){returnschoolname;}publicStringgetclassname(){returnclassname;}publicStringgetname(){returnstudentname;}publicStringgetcode(){returnstudentcode;}publicStringgetsexy(){returnstudentsexy;}publicStringgetbirthday(){returnstudentbirthday;}publicStringgetfamilyaddress(){returnfamilyaddress;}publicStringtostring(){Stringinfor=学校名称:+schoolname++班级名称:+classname++学生姓名:+studentname++学号:+studentcode++性别:+studentsexy++出生年月:+studentbirthday++家庭地址:+familyaddress;returninfor;}}下面再来设计教师类,其代码如下所示。///让教师类实现学校这个接口///设置器来设置各个参数///通过访问器来获得各个参数///通过tostring方法来让对象以字符串形式输出classteacherimplementsschool{privateStringschoolname;privateStringclassname;privateStringteachername;151privateStringteachercode;privateStringteachersexy;privateStringteacherbirthday;privateStringfamilyaddress;publicvoidsetschoolname(Stringschoolname){this.schoolname=schoolname;}publicvoidsetclassname(Stringclassname){this.classname=classname;}publicvoidsetname(Stringteachername){this.teachername=teachername;}publicvoidsetcode(Stringteachercode){this.teachercode=teachercode;}publicvoidsetsexy(Stringteachersexy){this.teachersexy=teachersexy;}publicvoidsetbirthday(Stringteacherbirthday){this.teacherbirthday=teacherbirthday;}publicvoidsetfamilyaddress(Stringfamilyaddress){this.familyaddress=familyaddress;}publicStringgetschoolname(){returnschoolname;}publicStringgetclassname(){returnclassname;}publicStringgetname(){returnteachername;}publicStringgetcode(){returnteachercode;}publicStringgetsexy(){returnteachersexy;}publicStringgetbirthday()152{returnteacherbirthday;}publicStringgetfamilyaddress(){returnfamilyaddress;}publicStringtostring(){Stringinfor=学校名称:+schoolname++班级名称:+classname++教师姓名:+teachername++教师工号:+teachercode++性别:+teachersexy++出生年月:+teacherbirthday++家庭地址:+familyaddress;returninfor;}}主运行程序的代码如下所示。///主运行函数///从学生类中创建出几个对象///从教师类中创建出几个对象//通过设置器设置各个参数,在对象内部隐藏着访问器,来访问这些参数///以字符串形式输出这些对象的字符串publicclassschooltest{publicstaticvoidmain(String[]args){studentst1=newstudent();studentst2=newstudent();teacherte1=newteacher();teacherte2=newteacher();st1.setschoolname(重庆大学);st1.setclassname(计算机二班);st1.setname(王浩);st1.setcode(951034);st1.setsexy(男);st1.setbirthday(1975-07-21);st1.setfamilyaddress(上海市浦东新区);st2.setschoolname(重庆大学);st2.setclassname(计算机三班);st2.setname(赵丽);st2.setcode(951068);st2.setsexy(女);st2.setbirthday(1975-10-09);st2.setfamilyaddress(北京海淀区);te1.setschoolname(四川大学);te1.
本文标题:03 java接口与内部类
链接地址:https://www.777doc.com/doc-6207022 .html