11.1.4 接口的实现

【实例11.2】接口的用处就是让类通过实现它,来执行一定的功能。下面通过实例演示接口的实现功能,在看实例之前,先看看这个实例的流程,如图11.1所示。


注意 类实现接口时要使用implements关键字。

首先看看学校接口的设计。


01 ///声明一个学校接口,来告诉程序需要做些什么

02 ///其中包括了很多方法。但是都没有去实现,即都没有函数体

03 interface school

04 {

05 void setschoolname(String schoolname);

06 void setclassname(String schoolclassname);

07 void setname(String name);

08 void setcode(String code);

09 void setsexy(String sexy);

10 void setbirthday(String birthday);

11 void setfamilyaddress(String familyaddress);

12 String getschoolname();

13 String getclassname();

14 String getname();

15 String getcode();

16 String getsexy();

17 String getbirthday();

18 String getfamilyaddress();

19 }


11.1.4 接口的实现 - 图1

图 11.1 有关接口的一个实例

下面再来设计学生类,其代码如下:


20 ///创建一个类,让它实现学校这个接口

21 ///通过设置器来设置各个参数

22 ///通过访问器来获得对象的参数

23 ///通过tostring方法来让对象以字符串形式输出

24 class student implements school

25 {

26 private String schoolname;

27 private String classname;

28 private String studentname;

29 private String studentcode;

30 private String studentsexy;

31 private String studentbirthday;

32 private String familyaddress;

33 public void setschoolname(String schoolname)

34 {

35 this.schoolname=schoolname;

36 }

37 public void setclassname(String classname)

38 {

39 this.classname=classname;

40 }

41 public void setname(String studentname)

42 {

43 this.studentname=studentname;

44 }

45 public void setcode(String studentcode)

46 {

47 this.studentcode=studentcode;

48 }

49 public void setsexy(String studentsexy)

50 {

51 this.studentsexy=studentsexy;

52 }

53 public void setbirthday(String studentbirthday)

54 {

55 this.studentbirthday=studentbirthday;

56 }

57 public void setfamilyaddress(String familyaddress)

58 {

59 this.familyaddress=familyaddress;

60 }

61 public String getschoolname()

62 {

63 return schoolname;

64 }

65 public String getclassname()

66 {

67 return classname;

68 }

69 public String getname()

70 {

71 return studentname;

72 }

73 public String getcode()

74 {

75 return studentcode;

76 }

77 public String getsexy()

78 {

79 return studentsexy;

80 }

81 public String getbirthday()

82 {

83 return studentbirthday;

84 }

85 public String getfamilyaddress()

86 {

87 return familyaddress;

88 }

89 public String tostring()

90 {

91 String infor="学校 名称:"+schoolname+""+"班级名称:"+classname+""+"学生姓

92名:"+studentname+""+"学号:"+studentcode+""+"性别:"+studentsexy+""+"出生年月:

93"+studentbirthday+""+"家庭地址:"+familyaddress;

94 return infor;

95 }

96 }


下面再来设计教师类,其代码如下所示。


97 ///让教师类实现学校这个接口

98 ///通过设置器来设置各个参数

99 ///通过访问器来获得各个参数

100 ///通过tostring方法来让对象以字符串形式输出

101 class teacher implements school

102 {

103 private String schoolname;

104 private String classname;

105 private String teachername;

106 private String teachercode;

107 private String teachersexy;

108 private String teacherbirthday;

109 private String familyaddress;

110 public void setschoolname(String schoolname)

111 {

112 this.schoolname=schoolname;

113 }

114 public void setclassname(String classname)

115 {

116 this.classname=classname;

117 }

118 public void setname(String teachername)

119 {

120 this.teachername=teachername;

121 }

122 public void setcode(String teachercode)

123 {

124 this.teachercode=teachercode;

125 }

126 public void setsexy(String teachersexy)

127 {

128 this.teachersexy=teachersexy;

129 }

130 public void setbirthday(String teacherbirthday)

131 {

132 this.teacherbirthday=teacherbirthday;

133 }

134 public void setfamilyaddress(String familyaddress)

135 {

136 this.familyaddress=familyaddress;

137 }

138 public String getschoolname()

139 {

140 return schoolname;

141 }

142 public String getclassname()

143 {

144 return classname;

145 }

146 public String getname()

147 {

148 return teachername;

149 }

150 public String getcode()

151 {

152 return teachercode;

153 }

154 public String getsexy()

155 {

156 return teachersexy;

157 }

158 public String getbirthday()

159 {

160 return teacherbirthday;

161 }

162 public String getfamilyaddress()

163 {

164 return familyaddress;

165 }

166 public String tostring()

167 {

168 String infor="学校名称:"+schoolname+""+"班级名称:"+classname+""+"教师姓名:

169"+teachername+""+"教师工号:"+teachercode+""+"性别:"+teachersexy+""+"出生年月:

170"+teacherbirthday+""+"家庭地址:"+familyaddress;

171 return infor;

172 }

173 }


主运行程序的代码如下所示。


174 ///主运行函数

175 ///从学生类中创建出几个对象

176 ///从教师类中创建出几个对象

177 ///通过设置器设置各个参数,在对象内部隐

178 ///藏着访问器,来访问这些参数

179 ///以字符串形式输出这些对象的字符串

180 public class schooltest

181 {

182 public static void main(String[]args)

183 {

184 student st1=new student();

185 student st2=new student();

186 teacher te1=new teacher();

187 teacher te2=new teacher();

188 st1.setschoolname("重庆大学");

189 st1.setclassname("计算机二班");

190 st1.setname("王浩");

191 st1.setcode("951034");

192 st1.setsexy("男");

193 st1.setbirthday("1975-07-21");

194 st1.setfamilyaddress("上海市浦东新区");

195 st2.setschoolname("重庆大学");

196 st2.setclassname("计算机三班");

197 st2.setname("赵丽");

198 st2.setcode("951068");

199 st2.setsexy("女");

200 st2.setbirthday("1975-10-09");

201 st2.setfamilyaddress("北京海淀区");

202 te1.setschoolname("四川大学");

203 te1.setclassname("计算机二班");

204 te1.setname("孙敏");

205 te1.setcode("00123");

206 te1.setsexy("女");

207 te1.setbirthday("1968-04-20");

208 te1.setfamilyaddress("重庆市沙坪坝区");

209 te2.setschoolname("四川大学");

210 te2.setclassname("机械系三班");

211 te2.setname("赵为民");

212 te2.setcode("11233");

213 te2.setsexy("男");

214 te2.setbirthday("1961-02-13");

215 te2.setfamilyaddress("成都市区");

216 System.out.println(st1.tostring());

217 System.out.println(st2.tostring());

218 System.out.println(te1.tostring());

219 System.out.println(te2.tostring());

220 }

221 }


【代码说明】本例代码比较长,但都非常简单。第3~19行定义接口school,并规范了14种方法。第24~96行定义了类student,其实现了接口school,也就是在类中实现了接口定义的14种方法,然后还定义了自己的tostring()方法,输出学生信息。第101~173行定义了类teacher,也实现了接口school,同样实现了接口中的14种方法,然后也定义了自己的tostring()方法,输出教师信息。第180~221行是主运行程序,其中定义了4个对象,然后调用tostring()方法输出信息。

【运行效果】


学校 名称:重庆大学 班级名称:计算机二班学生 姓名:王浩 学号:951034 性别:男出 生年月:1975-07-21 家庭地址:上海市浦东新区

学校 名称:重庆大学 班级名称:计算机三班学生 姓名:赵丽 学号:951068 性别:女出 生年月:1975-10-09 家庭地址:北京海淀区

学校 名称:四川大学 班级名称:计算机二班 教师姓名:孙敏 教师工号:00123 性别:女出 生年月:1968-04-20 家庭地址:重庆市沙坪坝区

学校 名称:四川大学 班级名称:机械系三班 教师姓名:赵为民 教师工号:11233 性别:男出 生年月:1961-02-13 家庭地址:成都市区


举这个例子的目的就是了解接口的用处。在这个程序段中,将接口作为一种规范,当要提取一个学生类时,就用学生类来实现学校这个接口。当要提取一个教师类时,教师类也实现学校这个接口。

接口的用处在于让整个程序段中相同类型的类有一个统一的规范,这样看到接口的定义,就知道要实现它的类的功能。在类实现接口时,需要注意以下几点:

❑声明类需要实现指定的接口。

❑提供接口中所有方法的定义。