java系统学习(八) --------接口与内部类
2015-09-02 14:50
645 查看
接口
接口概念的引入
在购买USB电脑鼠标的时候,不需要问电脑配件的商家,USB电脑鼠标是什么型号的? 原因就是USB接口是统一的、固定不变的一种型号,是一种规范。所有的商家都会按照这个规范,来制造USB接口的鼠标。这个规范说明制作该USB类型的鼠标应该做些什么,但并不说明如何做。而Java程序设计中的接口,也是一种规范。这个接口定义了类应该做什么,而不关心怎么做。即接口中只有方法名,没有具体实现的方法体。
接口的概念
接口只是说明类应该做了什么,但并不指定应该如何去做。在实际开发过程中,通过类来实现接口。接口只有方法名没有方法体,实现接口就是让其既有方法名又有方法体。下面就举个有关接口的模型:
接口
{
应该做的事情一();
应该做的事情二();
应该做的事情三();
}
这个例子只是声明了要做什么事情,但没有说明如何做,需要一个类去实现它.将它的方法体进行具体实现。
接口的声明
接口的声明很简单,使用关键字"interface”来声明。接口的形式跟类很相似,但要记住接口是接口,类是类,两者不能混为一谈。接口是要求类如何做的一套规范。//声明一个学校接口.来告诉程序需要做此什么 interface school { //接口中包括了很多方法.但是都没有实现,即都没有函数体 void setschoolname(Strinct schoolname); void setclassname(String schoolclassname); void setname(String name); void setcode(Strina code); void setsexv(String sexy); void setbirthday(String birthday); String getschoolname(); String getclassname(); String qetname(); String qetcode(); String qetsexy(); Strincx getbirthday(); }
接口的实现
以下类对应实现了上面的shcool接口//创建一个类.让它实现学校这个接口 class student implements school { //创建成员变量 private String schoolname; private String classname; private String studentname; private String studentcode; private String studentsexy; private String studentbirthday; //通过设置器来设置各个参数 public void setschoolname(String schoolname){ this.schoolname=schoolname; } public void setclassname(String classname){ this .classname=classname; } public void setname(String studentname){ this.studentname=studentname } public void setcode(String studentcode){ this.studentcode = studentcode } public void setsexy(String studentsexy){ this .studentsexy=studentsexy; } public void setbirthday(String studentbirthday){ this .studentbirthday=studentbirthday; } //通过访问器来获得对象的参数 public String getschoolname(){ return schoolname; } public String getclassname(){ return classname; } public String getname(){ return studentname } public String getcode()( return studentcode; } public String qetsexy(){ return studentsexy; } public String getbirthday(){ return studentbirthday; } //通过tostring方法来让对象以字符串形式输出 public String tostring(){ String infor="学校名称:"+schoolname+"班级名称:"+classname+"学生姓名:"+studentname+" 学号:"+studentcode+"+" 性别:"+studentsexy+" 出生年月:"+studentbirthday;return infor; }}
接口的多重实现
前面提到过接口能够补充继承的不足,现在讲解如何补充。继承必须是单继承的,即一个类继承另一个类后,那这个类就不能继承其他类。而接口则无所谓,一个类可以实现一个接口,也可以同时实现其他接口。例如以下例子,student类同时实现school 和 school1 接口:
interface school { void setschoolname(Strinct schoolname); void setclassname(String schoolclassname); void setname(String name); void setcode(Strina code); void setsexv(String sexy); void setbirthday(String birthday); } interface school1 { String getschoolname(); String getclassname(); String qetname(); String qetcode(); String qetsexy(); Strincx getbirthday(); } class student implements school,school1 { //创建成员变量 private String schoolname; private String classname; private String studentname; private String studentcode; private String studentsexy; private String studentbirthday; //通过设置器来设置各个参数 public void setschoolname(String schoolname){ this.schoolname=schoolname; } public void setclassname(String classname){ this .classname=classname; } public void setname(String studentname){ this.studentname=studentname } public void setcode(String studentcode){ this.studentcode = studentcode } public void setsexy(String studentsexy){ this .studentsexy=studentsexy; } public void setbirthday(String studentbirthday){ this .studentbirthday=studentbirthday; } //通过访问器来获得对象的参数 public String getschoolname(){ return schoolname; } public String getclassname(){ return classname; } public String getname(){ return studentname } public String getcode()( return studentcode; } public String qetsexy(){ return studentsexy; } public String getbirthday(){ return studentbirthday; } //通过tostring方法来让对象以字符串形式输出 public String tostring(){ String infor="学校名称:"+schoolname+"班级名称:"+classname+"学生姓名:"+studentname+" 学号:"+studentcode+"+" 性别:"+studentsexy+" 出生年月:"+studentbirthday; return infor; } }
接口的属性
接口不是一个类,正因为其不是一个类.所以不能使用关键字“new"生成一个接口的实例。虽然这样,还是可以声明一个接口变量,如:"school sc"如果要生成一个接口的实例,可以让接口变量指向一个已经实现了此接口的类的对象,如下面的例子:
school sc=new student();另外,在接口中,不能声明实例字段及静态方法,但可以声明常量。其实接口不一定要有方法,也可以全部是常量。
接口的继承
接口从某些方面具有类的一些特性,如有方法、有属性,那么是否像类一样可以继承?回答是肯定的。接口的继承和类的继承一样,也是用关键字“extends”来实现的。//创建一个接口 interface school { void setschoolname(String schoolname); void setclassname(String schoolclassname); String getschoolname(); String getclassname(); } //设计schooll接口并继承接口school interface schooll extends school{ void setname(String name); void setcode(String code); void setsexy(String sexy); void setbirthday(String birthday); void setfamilyaddress(String familyaddress); String getname(); String getcode(); String getsexy(); String getbirthday(); String getfamilyaddress(); }
内部类
内部类就是在一个类的内部再创建一个类。内部类的好处
内部类的对象能够访问创建它的对象的所有方法和属性,包括私有数据。
对于同一个包中的其他类来说,内部类是隐形的。
匿名内部类可以很方便地定义回调。
使用内部类可以很方便地编写事件驱动的程序。
使用内部类来访问对象
public class students{ //内部类的创建把内部类作为外部类的一个成员 private class course{ private String[] courses; private int coursenum; //内部类的构造器 public course(String[] course){ courses=course; coursenum=course .length; getinfo();//调用方法getinfo() } //获得课程数组中的课程 private void get(){ for(int i=0;i<coursenum; i++){ System.out.print(””+courses[i]); } } //按字符串形式输出 void getinfo(){ System.out.println("学生姓名:"+students.this.name+"学生学号 +students.this.code+"一共选择了:"+ coursenum+"科.分别是:); get(); } } } public class students{ //在主运行方法中,通过学生类的方法来访问学生类的内部类courses public static void maia(String[]args){ String[] courses={"语文","数学","英语","化学"}; students st=new students(); st.setname("王浩"); st.setcode("200123"); st.setsexy("男"); st.setaddress("北京海淀区"); System.out.println(st.tostring()); st.setstudentcourse(courses);//访问内部类 } }
局部内部类
局部内部类是定义在外部类的方法中,与局部变量类似,在局部内部类前不加修饰符"public”和“private",其范围为定义它的代码块。局部内部类不仅可以访问外部类实例变量,还可以访问外部类的局部常量,但要求外部类的局部变量是“final”的。其实,以上做法相当于为内部类添加了一个属性,这个属性就是外部类的“final”局部变量。在类外不可直接访问局部内部类,以保证局部内部类对外是不可见的,只有在方法中才能调用其局部内部类。当一个内部类不需要引用其外部类的方法和属性时,可以将这个类设置为“static";这就是是静态内部类。既然是静态的,包含它的类要引用它时,就可以不必创建对象,直接引用。静态内部类中只能访问外部类的静态成员。构造静态内部类对象,不再需要构造外部类对象。
匿名内部类
在编写程序代码时.不一定要给内部类取一个名字,可以直接以对象名来代替。在图形化编程的事件监控器代码中,会大量使用匿名内部类,这样可以大大的简化代码的编写,并增强了代码的可读性。常见问题
接口与继承有什么区别答:接口在本质就是一个特殊的类。在语法上跟继承有着很大的差别。
属性:接口中的所有属性都是公开静态常量,继承则无所谓。
方法:接口中所有方法都是公开抽象方法,继承中所有的方法不一定都是抽象的。
接口方法:接口没有构造器,继承有构造器
一个类能实现多个接口,只能继承一个父类。
相关文章推荐
- MyEclipse 2015 Stable 2.0破解方法
- java系统学习(八) --------接口与内部类
- java实现短连接
- java 发送邮件
- Java生成缩略图工具类
- Java生成缩略图工具类
- trie字母查找树java实现
- java中代码的注释和快捷键
- Java中的BoneCP数据库连接池用法
- 用Java判断一个URL是否有效的两种方法
- 配置struts2
- 整理的java的日期DateUtil
- Jdk安装
- 在myeclipse中java @override 报错处理
- Java中判断字符串是否为数字的五种方法
- MyEclipse的 at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>错误解决办fa
- 基于Java的四大开源测试工具
- Java教程
- spring注解集成ehcache
- java.lang.UnsupportedClassVersionError:"": Unsupported major.minor version